£ her kullanıldığında MySQL veya PHP Â ekleme edilir

6 Cevap php

Sağlanan yanıtlar tüm büyük olmuştur, ben hangi nedenle olursa olsun, UTF-8 çıktısı değildi çünkü benim CSV Üretimi komut bakmak gitmek gerekir ki Alnitak ait cevap açıklamalarda belirtildiği.

Doğru bir şekilde işaret edildiği gibi, bu UTF-8 çıktısı YAPILDI - Sorun kodlayan ben isterdi şekilde toplayıp değildi Ye Olde Microsoft Excel ile var.

Benim mevcut CSV nesil gibi bir şey görünüyordu:

// Create file and exit;
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
echo $csv_output;

Şimdi gibi görünüyor:

// Create file and exit;
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: text/csv; charset=ISO-8859-1");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");

echo iconv('UTF-8', 'ISO-8859-1', $csv_output);

-------------------------------------------------------

ORIGINAL QUESTION

Merhaba,

Ben veri toplayan bir form var, form ok çalışıyor ama sadece birisi türleri ya da 'TL' sembolü kullanıyorsa, MySQL DB 'Â £' ile biter fark ettik.

Gerçekten emin nerede ve nasıl oluyor bu durdurmak için değil, kod ve takip etmek DB bilgiler:

MySQL details

mysql> SHOW COLUMNS FROM fraud_report;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | mediumint(9) |      | PRI | NULL    | auto_increment |
| crm_number   | varchar(32)  | YES  |     | NULL    |                |
| datacash_ref | varchar(32)  | YES  |     | NULL    |                |
| amount       | varchar(32)  | YES  |     | NULL    |                |
| sales_date   | varchar(32)  | YES  |     | NULL    |                |
| domain       | varchar(32)  | YES  |     | NULL    |                |
| date_added   | datetime     | YES  |     | NULL    |                |
| agent_added  | varchar(32)  | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.03 sec)

PHP Function

function    processFraudForm($crm_number, $datacash_ref, $amount, $sales_date, $domain, $agent_added) {

    // Insert Data to DB
    $sql    = "INSERT INTO fraud_report (id, crm_number, datacash_ref, amount, sales_date, domain, date_added, agent_added) VALUES (NULL, '$crm_number', '$datacash_ref', '$amount', '$sales_date', '$domain', NOW(), '$agent_added')";
    $result = mysql_query($sql) or die (mysql_error());

    if ($result) {
        $outcome = "<div id=\"success\">Emails sent and database updated.</div>";
    } else {
        $outcome = "<div id=\"error\">Something went wrong!</div>";
    }

    return $outcome;
}

Example DB Entry

+----+------------+--------------+---------+------------+--------------------+---------------------+------------------+
| id | crm_number | datacash_ref | amount  | sales_date | domain             | date_added          | agent_added      |
+----+------------+--------------+---------+------------+--------------------+---------------------+------------------+
| 13 | 100xxxxxxx | 10000000     | £10.93 | 18/12/08   |  blargh.com        | 2008-12-22 10:53:53 | agent.name |

6 Cevap

Ne görüyorsanız UTF-8 kodlama - bu nispeten kompakt bir formatta Unicode karakterleri depolamak bir yoldur.

Pound sembolü Unicode değerini 0x00a3 var, ama UTF-8 yazıldığı zaman o 0xc2 0xa3 olur ve bu veritabanında saklanan buydu. Bu veritabanı tablo zaten UTF-8 kodlamasını kullanmak üzere ayarlanmış gibi görünüyor. Bu, good thing!

Eğer veritabanından dışarı geri değerini çekin ve (UTF-8 kodlanmış olarak ilan ediyor, bir web sayfası veya üzerinde) bir UTF-8 uyumlu terminali üzerinde gösterilecek eğer tekrar normal bir pound işareti gibi görünecektir.

 £ £ sembolü için UTF-8 kodlama 0xC2 0xA3 - yani UTF-8 olarak depolamak, ancak muhtemelen Latin-1 veya UTF-8 dışında bir şey olarak inceliyorsunuz

Bu nokta ve elle UTF-8 çözmek için bilmek yararlıdır - wikipedia page kodlama nasıl çalıştığı hakkında bilgi için kontrol edin:

  • 0xC2A3 = 110 {[(0)] 10} 100011
  • The bold parts are the actual "payload", which gives 10100011, which is 0xA3, the pound symbol.

PHP, başka bir küçük ölçekli bir çözüm iade utf8 dize bir dize dönüştürme yapmak için:

print iconv('UTF-8', 'ASCII//TRANSLIT', "Mystring â"); //"Mystring "

Veya başka platformlarda inconv komutu (linux / OSX) için bir sistem çağrısı yangın

http://php.net/manual/en/function.iconv.php#83238

You need to serve your HTML in utf-8 encoding (actually everyone needs to do this I think!) Header like:

Content-Type: text / html; charset = UTF-8

Veya eşdeğer. Çift olsa ayrıntıları kontrol edin. Her zaman bir tarayıcı olarak charset ilan edilmelidir onu seviyor şey için varsayılan.

Çok teşekkürler. Ben kiloluk sembolü currupting olduğu için mysql şüphelenen olmuştu. Şimdi csv kayıt oluşturulur yerde ben tüm yapmanız gereken, sadece incov sarın funciton kullanın. Bu iyi bir iş olsa, ben en azından birinin tam olarak ne yapacağını gösterdi, mutluyum. Ben sincerly eski ve yeni 'başlık' değerlerini dislaying teşekkür ederiz. Bu benim için büyük bir yardım oldu.

Işareti

Eğer hat iki farklı veri türü sütununu yani "varchar" in "50.000 £ Geliştirme Yarışması" & kaydederseniz "Metin" alanı.

Before i save i have replaced the symbol with html equi value using following function. str_replace("£", "£", $title);

Metin alanlarında depolanan değeri nerede onun "Â £" varchar olarak & sterlin olduğunu göreceksiniz.