簡體   English   中英

如何通過DOMDocument禁用自動鏈接

[英]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字符。 例如,捷克語字符串:

ěščřžýáíé

返回值:

&#283;&scaron;&#269;&#345;&#382;&yacute;&aacute;&iacute;&eacute;

我不能使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM