[英]How to disable auto-entitying by DOMDocument
我正在使用DOMDocument解析HTML字符串。 我以這種方式加載它:
$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="UTF-8"><div id="container">'.$text.'</div>', LIBXML_NOENT);
然后,我正在運行一些XPath查詢並對其進行節點替換。 (即使我注釋掉了這些操作,字符仍然被替換。)最后,我以這種方式保存它:
$parsed = $dom->saveHTML();
但是DOMDocument似乎正在用其實體表示形式替換非ASCII字符。 例如,捷克語字符串:
ěščřžýáíé
返回值:
ěščřžýáíé
我不能使用html_entity_decode()
,因為它破壞了已經突出顯示並正確轉義的源代碼。
我應該怎么做才能通過DOMDocument禁止使用實體自動替換非ASCII字符(因此,上面的示例也會返回ěščřžýáíé
)?
$dom = new DOMDocument();
$text = <div id="container">'.$text.'</div>';
$text = mb_convert_encoding($text, 'HTML-ENTITIES', "UTF-8");
$dom->encoding='UTF-8';
$dom->loadHTML($text);
好的,您是否嘗試更改方法:
$dom->loadXML();
通過默認,它使用utf-8,但如果未格式化$ text,則必須將xtext格式化為$ text嘗試:
$dom->loadHTML('<meta charset="utf-8"/>'.$text);
如果您從瀏覽器讀取數據,請嘗試以下操作:
echo '<meta charset="utf-8" />';
echo $parsed;
最后,我有一個解決方案。 它是如此簡單,只需使用<meta http-equiv="content-type" content="text/html;charset=utf-8">
而不是<?xml encoding="UTF-8">
<meta http-equiv="content-type" content="text/html;charset=utf-8">
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.