我对 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保存;
- 读取的 URL 是 UTF-8 字符串;
- 上面的脚本包含 DOMDocument 构造函数的编码声明,并且不使用任何转换函数,如 htmlentities、urlencode、utf8_encode...
我尝试更改 DOMDocument 属性DOMDocument::$resolveExternals和DOMDocument::$substituteEntities值。没有任何组合起作用。
是的,我知道我可以在不指定 DOMDocument 构造函数的字符集的情况下完成所有进程,将字符串内容转储到变量中,并使用字符串替换函数进行非常简单的字符串替换。这行得通。但我想知道我在哪里滑倒,如何使用本机 API 和设置来实现,或者即使这是可能的。
提前致谢。