PHP DOMDocument loadHTML некорректно кодирует UTF-8

Я пытаюсь разобрать некоторый HTML с помощью DOMDocument, но когда я это делаю, я внезапно теряю кодировку (по крайней мере, так кажется мне).

$profile = "<div><p>various japanese characters</p></div>";
$dom = new DOMDocument();
$dom->loadHTML($profile); 

$divs = $dom->getElementsByTagName('div');

foreach ($divs as $div) {
    echo $dom->saveHTML($div);
}

Результатом этого кода является то, что я получаю набор символов, которые не являются японскими. Однако, если я это сделаю:

echo $profile;

он отображается правильно. Я пробовал saveHTML и saveXML, но ни один из них не отображает Я использую PHP 5.3.

Что я вижу:

ã¤ãªãã¤å·ã·ã«ã´ã«ã¦ãã¢ã¤ã«ã©ã³ãç³»ã®å®¶åº­ã«ã9人åå¼ã®5çªç®ã¨ãã¦çã¾ãããå½¼ãå«ãã¦4人ã俳åªã«ãªã£ããç¶è¦ªã¯æ¨æã®ã»ã¼ã«ã¹ãã³ã§ãæ¯è¦ªã¯éµä¾¿å±ã®å®¢å®¤ä¿ã ã£ããé«æ ¡æ代ã¯ã­ã£ãã£ã®ã¢ã«ãã¤ãã«å¤ãã¿ãæè²è³éãåããªããã«ããªãã¯ç³»ã®é«æ ¡ã¸é²å­¦ã

Что должно быть показано:

イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として生まれる。彼を含めて4人が俳優になった。父親は木材のセールスマンで、母親は郵便局の客室係だった。高校時代はキャディのアルバイトに勤しみ、教育資金を受けながらカトリック系の高校へ進学

РЕДАКТИРОВАТЬ: Я упростил код до пяти строк, чтобы вы могли проверить его самостоятельно.

$profile = "<div lang=ja><p>イリノイ州シカゴにて、アイルランド系の家庭に、</p></div>";
$dom = new DOMDocument();
$dom->loadHTML($profile);
echo $dom->saveHTML();
echo $profile;

Вот это html, который возвращается:

<div lang="ja"><p>イリノイ州シカゴã«ã¦ã€ã‚¢ã‚¤ãƒ«ãƒ©ãƒ³ãƒ‰ç³»ã®å®¶åº­ã«ã€</p></div>
<div lang="ja"><p>イリノイ州シカゴにて、アイルランド系の家庭に、</p></div>
174
задан cmbuckley 17 October 2013 в 22:31
поделиться

1 ответ

Единственной вещью, которая работала на меня, был принятый ответ

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>';
$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $profile);
echo $dom->saveHTML();

ОДНАКО

, Это вызвало новые проблемы наличия <?xml encoding="utf-8" ?> в выводе документа.

решение для меня состояло в том, чтобы затем сделать

foreach ($doc->childNodes as $xx) {
    if ($xx instanceof \DOMProcessingInstruction) {
        $xx->parentNode->removeChild($xx);
    }
}

, Некоторые решения сказали мне, что для удаления xml заголовок что я должен был выполнить

$dom->saveXML($dom->documentElement);

, Это не работало на меня что касается частичного документа (например, документ с два <p> теги), только один из <p> теги где быть возвращенным.

0
ответ дан 23 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: