2011-08-20 20 views
8

DOMDocumentのマングリングを停止する方法を理解できません。PHPのDOMDocumentでhtmlエンティティのエンコードを無効にする

<?php 

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

?> 

予想される出力:(_o°) ¯/¯

実際の出力:私はAを見つけた Â ¯(Â ° _o)/ Â ¯

http://codepad.org/W83eHSsT

+0

なぜあなたはHTML文書でそのぎこちない言い方をしたいのですか? –

+0

とにかく、あなたのエディタ/ファイル転送プログラム/ PHPコードがUnicodeではないという事実は、DOMDocumentが問題を抱えているよりも、それらを "mangling"している可能性が高いです。 –

+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のドットコム> 21 - 12月 - 2009年< mdmitryから午前5時02分のコメント: "あなたもこのシンプルなハックを使用してUTF-8としてHTMLを読み込むことができます:")

だけ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

それは私のために働く。 PHPファイル用のUTF-8の使用 - 私はそれをテストしました。私はCodepadが内部でやっていることは分かっていませんが、彼らはエンティティを返送しています... – feeela

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

文書の先頭ではsaveXMLとsaveHTMLの両方のために...タグの世話をします。

関連する問題