使用PHP 5 DOM获取XML编号实体

时间:2010-05-18 02:31:52

标签: php utf-8 special-characters domdocument entities

我是新来的,并且有一个整天欺骗我的问题。

我制作了一个PHP脚本,通过cURL读取网站源代码,然后使用DOMDocument类生成站点地图文件。

它几乎在每个方面都像魅力一样。问题在于特殊字符。

出于兼容性原因,站点地图文件需要将所有特殊字符编码为编号实体。我没有实现这一目标。

例如,我的一个条目 - 自动从网站URL读取,并写入站点地图文件 - 是:

http://www.somesite.com/serviços/redesign/

在源代码上它应该是:

* http://www.somesite.com/servi ** C ** OS /重新设计/ *

就是这样。但不幸的是,我真的不知道该怎么做。

源代码文件,服务器标头等......所有内容都编码为UTF-8。

我正在使用DOMDocument和相关扩展来构建XML。 (基本上,DOMDocument,$ obj-> createElement,$ obj-> appendChild)。

htmlentities提供ç而不是ç str_replace不起作用。它使得角色在输出中消失。

我使用的是$ obj-> createElement(“loc”,$ url);在我的代码上,刚才我在PHP手册中读到了我应该使用$ document-> createTextNode($ page),以便让实体编码支持。

嗯,它也没有用。

关于如何解开这个问题的任何想法?

感谢。

2 个答案:

答案 0 :(得分:1)

htmlentities有第3个参数=使用的字符集即

htmlentities($string,ENT_COMPAT,"UTF-8");

答案 1 :(得分:1)

我使用过滤器扩展名:

$ url = filter_var($ url,FILTER_SANITIZE_STRING,FILTER_FLAG_ENCODE_HIGH)

使用前。这比我尝试过的任何其他解决方案都更好(bcoz它符合RFC)。