Neden DOM Değişim Kodlama mu?

3 Cevap php
$string = file_get_contents('http://example.com');

if ('UTF-8' === mb_detect_encoding($string)) {
    $dom = new DOMDocument();
    // hack to preserve UTF-8 characters
    $dom->loadHTML('<?xml encoding="UTF-8">' . $string);
    $dom->preserveWhiteSpace = false;
    $dom->encoding = 'UTF-8';
    $body = $dom->getElementsByTagName('body');
    echo htmlspecialchars($body->item(0)->nodeValue);
}

Bu ¾, ¤ ve diğer çöp, Å tüm UTF-8 karakter değiştirir. Nasıl UTF-8 karakterlerini korumak için başka bir yolu var mı?

Ben UTF-8 olarak çıktısı ediyorum emin olmak için bana cevaplar sonrası etmeyin, ben olduğumdan emin yaptı.

Şimdiden teşekkürler :)

3 Cevap

Geçenlerde benzer sorunlar vardı ve sonunda bu geçici çözüm bulundu - html yüklemeden önce varlıkları html tüm non-ASCII karakterleri dönüştürmek

$string = mb_convert_encoding($string, 'HTML-ENTITIES', "UTF-8");
$dom->loadHTML($string);

Durumda kodlama vidalama kesinlikle DOM, bu hile bir süre geri yuvarlak diğer yolu (ISO-8859-1 veri kabul ederek) benim için yaptı. DOMDocument should her durumda varsayılan olarak UTF-8 olabilir ama yine de deneyebilirsiniz:

    $dom = new DOMDocument('1.0', 'utf-8');

Kodu php yatıyor komut (burada yayınlanan kodu) üst kısmında, bir utf-8 başlık göndermek emin olun. Ben senin kodlama şu anda latin1 bir bazı varyant bahis. Evet, uzaktan web sayfası utf8 olduğunu biliyorum, ama bu php script değildir.