【问题标题】:How to skip/remove invalid non-utf8 characters from a xml file如何从 xml 文件中跳过/删除无效的非 utf8 字符
【发布时间】:2015-03-22 12:06:24
【问题描述】:

我正在寻找一种从 xml 文件中删除/跳过非 utf8 字符的方法。
我正在使用 simplexml_load_string(),但是当文件包含非 utf8 字符时,我收到错误“解析器错误:CharRef:无效的十六进制值”,代码如下所示:

Q7fzÕ6,¯å1òw~Ò`H-7%¨§ÃU³^Ôàƒ³‡Îá_s…“w²žrâºæºçYF#K‰àa¥²o8Îk쎻qíNž‚ËÂUeJvgXêõ»'[Hw®Èl[-&#xAEPs§æŠ§£gáRÓ„Å2Ì$ŽŽŠŽÆÁœ˜.E~Ѱ@=

我无法从该 xml 中保存信息,我尝试了许多来自 web/stackoverflow 的解决方案,没有人帮助我。
我正在尝试使用 preg_replace 等。
谢谢 !

【问题讨论】:

  • 问题不在于看起来怪异的字符(它们本身是有效的),而在于像&#xAEP 这样的损坏的实体。尝试删除/转义此文本中的 & 符号或将其包装在 CDATA 块中。
  • @georg 是的,你说得对,$string = str_replace('&', ' ', $string);我的代码正在运行。

标签: php xml xml-parsing


【解决方案1】:

评论回复:

尝试删除/转义此文本中的 & 符号或将其包装在 CDATA 中 阻止

所以我在调用函数之前放了
simplexml_load_string($string)
这个
$string = str_replace('&', ' ', $string);.
现在它可以工作了,字符串中没有 & 所以 simplexml_load_string() 可以毫无错误地解析。

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 2010-12-27
    • 2011-03-28
    • 2011-03-14
    • 2019-08-09
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多