07

数据库中有一个“—”符号,PHP直接echo出来是这个东西。生成DOM文档树后输出,该字符被编码为“—”

echo $dom->saveHTML();

从输出看,默认编码是ASCII,而且没有改变编码的选项。它把每个汉字(双字节字符)编码成&#加上一个5位十进制数再加上一个分号。这棵树成功地生成后,输出到页面,javascript使用ActiveXObject(IE)、parseFromString(FF)均不能解析该字符,并导致文档树生成失败。后在PHP输出时,写作

echo str_replace(“—”,”—”,$dom->saveHTML());

从流程上说,是让PHP帮助页面做了初步解码。

后记:找到一个一揽子解决办法,请注意上文提到的ASCII编码对PHP来说是HTML-ENTITIES。用它把HTML-ENTITIES翻译成UTF-8,这样输出的XML文档就直接都是汉字,可以被js正确地解析了

echo mb_convert_encoding($dom->saveHTML(),”UTF-8″,”HTML-ENTITIES”);

written by 城市过客甲


Leave a Reply