2011-08-20 25 views
8

我無法弄清楚如何阻止DOMDocument使這些字符變形。在PHP中禁用html實體編碼DOMDocument

<?php 

$doc = new DOMDocument(); 
$doc->substituteEntities = false; 
$doc->loadHTML('<p>¯\(°_o)/¯</p>'); 
print_r($doc->saveHTML()); 

?> 

預期輸出: ¯(°_O)/¯

實際輸出: Â ¯(Â ° _O)/ Â ¯

http://codepad.org/W83eHSsT

+0

爲什麼要在HTML文檔中使用這種亂碼? –

+0

無論如何,它更有可能是你的編輯器/文件傳輸程序/ PHP代碼不是Unicode的事實是「篡改」它們,而不是「DOMDocument」有任何問題。 –

+0

我在這裏找到了答案: http://stackoverflow.com/questions/2142120/php-encoding-with-domdocument/2671410#2671410只需使用mb_convert_encoding($ string,'html-entities','utf-8' ); – anonymous

回答

3

我已經發現了提示http://php.net/manual/en/domdocument.loadhtml.php

(在Gmail的點com評論從<mdmitry> 12月21日2009年5時02分: 「你還可以加載HTML爲UTF-8使用這種簡單的黑客」)

的HTML的前只需添加'<?xml encoding="UTF-8">'輸入:

$doc = new DOMDocument(); 
//$doc->substituteEntities = false; 
$doc->loadHTML('<?xml encoding="UTF-8">' . '<p>¯\(°_o)/¯</p>'); 
print_r($doc->saveHTML()); 
+1

它不起作用。我已經在該頁面上嘗試了所有內容。 http://codepad.org/Sr3d710Q – anonymous

+0

它確實對我有用。使用UTF-8處理PHP文件 - 我測試過了。我不知道,什麼Codepad在內部做什麼,但他們正在返回實體... – feeela

2
<?xml version="1.0" encoding="utf-8"> 

在文檔的頂部需要照顧的標籤。對於這兩個saveXML和saveHTML。