4

DOMDocumentPHPのsaveXML()およびsaveHTML()メソッドを使用すると、「ダンプ」動作が異なることに気付きました。著作権記号 (©) をダンプする簡単な例を次に示します。

<?
$domDoc = new DOMDocument();
$domDoc->loadHTML("&copy;");
echo $domDoc->saveHTML();
echo $domDoc->saveXML();
echo $domDoc->saveXML($domDoc);
?>

3 つのダンプにより、次の 3 つの異なる出力が生成されます。

1 つ目は文字列を出力します&copy;
2 つ目は文字エンティティを出力します&#xA9;
3 つ目は著作権記号 ( U+00A9)の UTF8 2 バイト コードを出力します

出力が異なるのはなぜですか?どの方法が使用されるかを予測可能に制御する方法はありますか?

4

1 に答える 1

1

私は PHP の専門家ではありませんが、最初の 2 つは次のとおりです。

  • saveHTML() は、HTML で利用可能なエンティティを使用します。そのうちの&copy;1 つです。
  • HTML エンティティが利用できないため、saveXML() は 16 進エンコーディングを使用します。

3 つ目は、ドキュメントによると、ノードを指定すると、指定されたノードは XML 宣言なしで (つまり、ドキュメント フラグメントとして) 書き込まれます。その場合、UTF-8エンコーディングを想定することを決定することしか推測できません。この動作は、ドキュメントから明らかではありません。

于 2010-01-04T19:56:45.677 に答える