benim PHP kodundan XML çıktısını doğrulamak için PHPUnit kullanıyorum, ancak görünüşe göre ben karakter kodlaması MySQL döner ile ilgili sorunlar var. Doğru kodlamayı kullanır böylecenasıl MySQL dönüş UTF-8 yapabilirim?
Input is not proper UTF-8, indicate encoding!
Bytes: 0xE9 0x20 0x42 0x65
Ben DOMDocument başlatmak:
$domDocument = new DOMDocument('1.0','UTF-8');
Ve kullanarak) (SaveXML çıktı kontrol ederken sonuca mb_detect_encoding UTF-8 İşte ben DOMDocument aldığım hatadır .
Ayrıca tüm createCDATASection parametrelerinde mb_detect_encoding kullanarak, XML oluşturmak için kullanılan tüm çağrıları da kontrol ettim ve bunların hepsi UTF-8 veya ASCII (düz metin düğümleri yok, her şey CDATA blokundadır).
Ben sorun (ISO 8859-1 yılında 0xE9 olan) bir 'é' karakteri kullanımı geliyor düşünüyorum. Benim XML o karakter ekler çizgidir:
$domDocument->createCDATASection($place->name);
ve mb_detect_encoding ($ yer-> isim) bana UTF-8 verir.
verileri ($ yer-> isim) MySQL veritabanından çekilir. Bu veritabanı UTF-8 karakter kümesine sahiptir. İşte
bazı örnek kod şudur: Benim PhpStorm ayıklayıcıya olarak$query = sprintf('SELECT name FROM place where id = 1');
$result = mysql_query($query);
$result = mysql_fetch_assoc($result);
// -- Feeding UTF-8 data directly WORKS
$domDocument = new DOMDocument('1.0','UTF-8');
$rootNode = $domDocument->createElement('Response');
$rootNode->appendChild($domDocument->createCDATASection('Café Belga'));
$domDocument->appendChild($rootNode);
$matcher = array('tag' => 'Response');
self::assertTag($matcher, $domDocument->saveXML(), '', FALSE);
// -- Feeding UTF-8 data from the resultset FAILS
$domDocument = new DOMDocument('1.0','UTF-8');
$rootNode = $domDocument->createElement('Response');
$rootNode->appendChild($domDocument->createCDATASection($result['name']));
$domDocument->appendChild($rootNode);
$matcher = array('tag' => 'Response');
self::assertTag($matcher, $domDocument->saveXML(), '', FALSE);
, veritabanından getirilen dize şöyle görünür:
Caf Belga
Yani bence Bu sorunun köküdür. MySQLWorkbench'de dize doğrudur: Café Belga.
utf8_encode($result['name'])
'u kullanırken, her şey iyi çalışıyor!
saatler penceresindeki Bir daha çek:
mb_detect_encoding($result['name'])
-> "UTF-8"
mb_detect_encoding(utf8_encode($result['name']))
-> "UTF-8" Yan not
, vardır orada herhangi siteleri nerede Bu onaltılık değerleri kopyalayıp yapıştırabilir ve farklı karakter kümelerinde hangi karakterlerin olması gerektiğini görebilir miyim?
kullanmalıdır 5.5.0? Bir dosyada mı? Kodunda mı? – Yeroon
Üzgünüz, bu söylemeyi unutmuşum, Sorumu düzenlendi: veri mysql veritabanından çekilir. Bu veritabanı utf8 karakter kümesine sahiptir. –
@Joris Eğer DOMDocument oluşturduktan sonra herhangi bir noktada LoadXml kullanıyorsunuz? Ayrıca, sorunu gösteren, bizim için tekrarlanabilir bir test çantası sağlayabilir misiniz? – Gordon