Php garip utf8 dönüşümü sorun

2 Cevap php

Bu yüzden bazı satırları utf8 semboller gerektiren ama tuhaf bir şekilde kodlandığını dosyasında, bir dosyadan veri alıyor bir proje üzerinde çalışıyorum, onlar örneğin yerine Æ \ olmaktan xC6 \ vardır

Ben aşağıdaki gibi yapın:

$name = "\xC6ther";
$name = preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);
echo utf8_encode($name);

Bu çalışıyor. Ben bu olsun:

Æther

Ama MySQL aynı veri çekme ve aşağıdaki gibi yaparsanız:

$name = $row['OracleName'];
$name = preg_replace('/x([a-fA-F0-9]{2})/', '\&#$1;', $name);
$name = utf8_encode($name);

Sonra çıkış olarak bu alırsınız:

\&#C6;ther

Bu yüzden herkes biliyor musun?

$ Row ['OracleName'] ve istendiği gibi, vardump;

string(15) "xC6ther Barrier"

2 Cevap

İkinci preg_replace üzerinde neden bir \ var

preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);

Tamam ben burada bir karışıklık olduğunu düşünüyorum. Düzenli ifade x66 gibi bir şey eşleştirme ve bana bazı html entities kodlama olarak görünüyor, '& # 66' ile bu yerini alacak ama sen [(2) {kullanıyorsunuz ]} hangi yapmak (manuel):

utf8_encode - UTF-8 için ISO-8859-1 dize kodlar

(onlar ISO-8859-1 ve UTF-8 tüm aynı karakter olduğundan, ya da daha kesin '& # 66' olur kalır '& # 66' olmak üzere) yani şey ... dönüştürülür olsun asla

Ayrıca ilk size \xC6 kullanmak pasajı ama bu preg_replace zaten kodlanmış beri karakteri tarafından yakalanmak asla üzerinde belirtilmelidir. \x sonraki onaltılık sayı (0x00 ~ 0xFF) olduğu gibi dize damla olacak demektir. bir dize xC6 yapmaz

Yani tür karıştı gerçekten yapmak istediğini duyuyorum. preg_replace tüm hakkında ne?

Eğer içine UTF-8 görünüm HTML kuruluşlar dönüştürmek istiyorsanız mb_convert_encoding (manual), içine bazı UTF-8 bakıştan HTML kuruluşlarda ters kod yapmak istiyorsanız { [(2)]} (manual)

o bütün ile ilgisi yoktur ve sadece kodlamasını değiştirmek istiyorsanız ve mb_convert_encoding hala orada.

Sorun, SQL çekme ben preg_replace bir 'x' cevapsız anladım

preg_replace('/x([a-fA-F0-9]{2})/', '&#x$1;', $name);

Ben x eklendikten sonra, bir cazibe gibi çalıştı.