我遇到一些困難與PHP DOM類。PHP - DOM類 - 實體編號和編碼問題
我想提出一個網站地圖的腳本,我需要的$輸出doc-> saveXML()要像
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/serviços/redesign</loc>
</url>
</root>
或
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/serviços/redesign</loc>
</url>
</root>
,但我得到:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/servi&#xE7;os/redesign</loc>
</url>
</root>
這是衣櫃裏我能得到,使用頂替命名編號的實體功能。
我也能夠重現
<?xml version="1.0" ?>
<root>
<url>
<loc>http://www.somesite.com/servi&#xE7;os/redesign</loc>
</url>
</root>
但是,如果沒有指定的編碼。
最好的解決方案(我想的代碼應寫入的方式)將是:
<?php
$myArray = array();
// do some stuff to populate the with URL strings
$doc = new DOMDocument('1.0', 'UTF-8');
// here we modify some property. Maybe is the answer I am looking for...
$urlset = doc->createElement("urlset");
$urlset = $doc->appendChild($urlset);
foreach($myArray as $address) {
$url = $doc->createElement("url");
$url = $urlset->appendChild($url);
$loc = $doc->createElement("loc");
$loc = $url->appendChild($loc);
$valueContent = $doc->createTextNode($value);
$valueContent = $loc->appendChild($address);
}
echo $doc->saveXML();
?>
注:
- 服務器響應報頭包含的字符集爲UTF-8;
- PHP腳本保存在UTF-8;
- 網址讀是UTF-8字符串;
- 上面的腳本包含DOM文檔構造編碼聲明,並且不使用任何轉換功能,如ヶ輛,用urlencode,函數utf8_encode ...
我試圖改變DOM文檔屬性的DOMDocument :: $ resolveExternals和DOMDocument :: $ substituteEntities值。沒有組合的工作。
是的,我知道我可以做所有的過程,而不指定字符的DOM文檔構造函數中設置轉儲字符串內容到一個變量,並用繩子一個非常簡單的字符串替換替換功能。這工作。但我想知道我在哪裏滑倒,如何使用本機API和設置進行此操作,或者即使這是可能的。
在此先感謝。
感謝您的所有意見和答覆。 在進一步閱讀了sitemap協議規範和RFC之後,我得到了一個解決方案。 我正在使用urlencode函數處理URL條目。我意識到的一件事是PHP的內置urlencode函數大部分基於RFC 1738.當前URL RFC是3986. 這裏是我的函數來正確地將URL轉換爲百分比實體。 – Dave 2010-05-19 01:22:24
function myUrlEncode($ string){ \t $ entities = array('%21','%2A','%27','%28','%29','%3B','%3A', '%40','%26','%3D','%2B','%24','%2C','%2F','%3F','%25','%23', '%5B','%5D'); \t $ replacements = array('!','*',「'」,「(」,「)」,「;」,「:」,「@」,「&」,「=」,「+」 ,「$」,「,」,「/」,「?」,「%」,「#」,「[」,「]」); \t return str_replace($ entities,$ replacementments,urlencode($ string)); } – Dave 2010-05-19 01:23:42