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 и т. Д. … мой текст заканчивается следующим образом:
你的乱发
этот экран отлично отображается в тексте HTML, но не будет отображаться правильно в теге стиля или скрипта (например, настройка шрифтов в китайском шрифте).
исправить это, сделать обратный lauthiamkok сделал:
$html = mb_convert_encoding($html, "UTF-8", "HTML-ENTITIES");
если по какой-либо причине первое обходное решение не работает для вас, попробуйте это преобразование.
Я уверен, что ä½ çš„ä¹±å'
на самом деле является Windows Latin 1 (а не ASCII, в ASCII нет диакритики). Где-то по пути ваш текст UTF-8 был сохранен как Windows Latin 1 ….