PHP DOMDocument, проблемы Unicode - PullRequest
       16

PHP DOMDocument, проблемы Unicode

1 голос
/ 23 февраля 2012

У меня тут какая-то проблема

$source = "<html><body><h1>&#8220;</h1></body></html>";
$dom = new DOMDocument();
$dom->loadHTML($source);
echo $dom->saveHTML();

Выход:

<! DOCTYPE html PUBLIC "- // W3C // DTD HTML 4.0 Transitional // EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

& ldquo;

Хорошо, это работает правильно. Но если я хочу извлечь узлы, как это

$source = "<html><body><h1>&#8220;</h1></body></html>";
$dom = new DOMDocument();
$dom->loadHTML($source);
$h1 = $dom->getElementsByTagName('h1');
echo $dom->saveHTML($h1->item(0));

Вывод нераспознанного текста.

â € œ

Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Ваш пример кода работает для меня, вывод <h1>“</h1>.

&ldquo;    <ENTITY TYPE="#8220"/>    “    Left double quotation mark

Двоичная последовательность UTF-8 :

0xE2 (226) 0x80 (128) 0x9C (156)
 |          |           `------ Windows-1252: œ
 |          `--- most Windows 125x encodings: €
 `--- ISO 8859-1, 2, 3, 4, 9, 10, 14, 15, 16: â

Так где же вы видите этот вывод?

Возможно, внутри вашего браузера на Windows? Если внутри вашего браузера вы пытались добавить

header('Content-Type: text/html; charset=utf-8');

поверх вашего сценария?

См. Также: Установка параметра кодировки HTTP и Проверка заголовков HTTP .

0 голосов
/ 23 февраля 2012

вам нужен второй параметр конструктора domdocument (оформить заказ http://nl.php.net/manual/en/domdocument.construct.php):

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