2010-01-04 14 views
4

我注意到使用PHP的DOMDocumentsaveXML()saveHTML()方法時存在不同的「傾銷」行爲。這是一個傾銷版權符號的簡單示例(©)。轉儲非ASCII字符時DOMDocument的不一致行爲的解釋是什麼?

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

三個轉儲產生三種不同的輸出:

第一輸出串&copy;
第二輸出字符實體&#xA9;
第三輸出用於版權符號的UTF8 2字節代碼(U+00A9

爲什麼不同的輸出?有沒有一種方法來預測控制使用哪種方法?

+0

由於您的問題的主要領域是PHP,您可能會考慮將其重新標記爲(並放棄其中一個其他標記) – 2010-01-04 19:59:03

+0

遵循您的建議。謝謝。 – Sleepster 2010-01-06 12:15:44

+0

+1我也想知道爲什麼使用'loadHtml()','loadXml()','saveHtml()','saveXml()'這些不一致。也許這些錯誤在libxml中? – 2010-11-20 16:58:10

回答

1

我不是一個PHP專家,但前兩個:

  • saveHTML()方法將利用現有的實體在HTML中,其中&copy;是一個
  • saveXML()將使用十六進制編碼,因爲HTML實體將不可用

對於第三種情況,文檔說如果您提供了一個節點,那麼給定的節點就會被寫入而沒有XML聲明(即作爲文檔片段)。我只能猜測,在這種情況下,它決定採用UTF-8編碼。這種行爲在文檔中並不明顯。

相關問題