2014-09-01 40 views
0

我正在使用DOMDocument解析HTML字符串。我正在用這種方式加載:如何通過DOMDocument禁用自動綁定

$dom = new DOMDocument(); 
$dom->loadHTML('<?xml encoding="UTF-8"><div id="container">'.$text.'</div>', LIBXML_NOENT); 

然後,我正在運行一些XPath查詢和節點替換它。 (即使我註釋掉這些動作,人物仍然得到更換。)最後,我已把它是這樣的:

$parsed = $dom->saveHTML(); 

但DOM文檔似乎與它的實體表示來代替非ASCII字符。例如,字符串捷克語:

ěščřžýáíé 

返回:

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

我不能使用html_entity_decode(),因爲它打破已經強調,妥善逃脫的源代碼。

我該怎麼做才能禁用DOMDocument自動替換實體的非ASCII字符(所以,上面的例子也會返回ěščřžýáíé)?

回答

0

最後,我有一個解決方案。這是如此簡單,而不是<?xml encoding="UTF-8">使用<meta http-equiv="content-type" content="text/html;charset=utf-8">

+0

我已經做了一些挖掘,發現它取決於PHP版本,分別在libxml版本上。 – Jacob 2015-01-01 14:14:33

0
$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); 

OK,你嘗試改變方法:

$dom->loadXML(); 

默認情況下將使用UTF-8,但$文本必須XHTML格式化 如果$文本未格式化的嘗試:

$dom->loadHTML('<meta charset="utf-8"/>'.$text); 

如果你讀了從瀏覽器的數據,試試這個:

echo '<meta charset="utf-8" />'; 
    echo $parsed; 
+0

無法正常工作,字符仍在轉換(PHP 5.4.19,DOM/XML API 20031129,libxml 2.7.8)。 – Jacob 2014-09-01 14:09:38

+0

字符串不是XHTML格式,第二種方法產生不好的結果(也是實體,但這次它們不等於原始字符)。 – Jacob 2014-09-01 15:27:04

+1

我並不那麼愚蠢。我正在處理這個問題大約一週,所以我真的需要幫助。 – Jacob 2014-09-01 16:17:54