Как сохранить китайский или другой иностранный язык, как они есть, вместо того, чтобы превращать их в коды?

DOMDocument похоже, преобразует китайские символы в коды, например,

你 的 乱发 станет ä½ çš„ä¹±å'

Как я могу сохранить китайский или другой иностранный язык, вместо того, чтобы преобразовывать их в коды?

Ниже мой простой тест,

 $dom = new DOMDocument(); $dom->loadHTML($html); 

Если я добавлю это ниже перед loadHTML (),

 $html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8"); 

Я получил,

 你的乱发 

Несмотря на то, что скрытые коды будут отображаться в виде китайских символов, 你的乱发 все еще не 你的乱发 что я после ….

DOMDocument, похоже, преобразует китайские символы в коды […]. Как я могу сохранить китайский или другой иностранный язык, вместо того, чтобы преобразовывать их в коды?

 $dom = new DOMDocument(); $dom->loadHTML($html); 

Если вы используете функцию loadHTML для загрузки фрагмента HTML. По умолчанию DOMDocument ожидает, что строка будет в кодировке по умолчанию HTML ( ISO-8859-1 ), однако чаще всего кодировка (sic!) Представляет собой метаинформацию, предоставленную рядом с используемой вами строкой, а не внутри. Чтобы сделать это более сложным, эта метаинформация будет даже внутри строки.

В любом случае, поскольку вы не разделили строковые данные HTML и вы не указали кодировку, трудно точно сказать, что происходит.

Я предполагаю, что HTML кодируется в кодировке UTF-8, но это не сигнализируется внутри строки HTML. Таким образом, следующая работа может помочь:

 $doc = new DOMDocument(); $doc->loadHTML('<?xml encoding="UTF-8">' . $html); // dirty fix foreach ($doc->childNodes as $item) if ($item->nodeType == XML_PI_NODE) $doc->removeChild($item); // remove hack $doc->encoding = 'UTF-8'; // insert proper 

Он вводит подсказку с самого начала (и удаляет ее после загрузки HTML). С этого момента DOMDocument вернет UTF-8 (как всегда).

Я просто наткнулся на эту нить при поиске решения аналогичной проблемы, после того, как я правильно загрузил html и сделал синтаксический анализ с помощью Xpath и т. Д. … мой текст заканчивается следующим образом:

 &#20320;&#30340;&#20081;&#21457; 

этот экран отлично отображается в тексте HTML, но не будет отображаться правильно в теге стиля или скрипта (например, настройка шрифтов в китайском шрифте).

исправить это, сделать обратный lauthiamkok сделал:

 $html = mb_convert_encoding($html, "UTF-8", "HTML-ENTITIES"); 

если по какой-либо причине первое обходное решение не работает для вас, попробуйте это преобразование.

Я уверен, что ä½ çš„ä¹±å' на самом деле является Windows Latin 1 (а не ASCII, в ASCII нет диакритики). Где-то по пути ваш текст UTF-8 был сохранен как Windows Latin 1 ….