IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

PHP simplexml_load_file与特殊字符

小小子,simaopig 2010-07-16 00:21:47 累计浏览 3,180 次
本机暂存

    虽然本周末很凉快,不过过的实在有些忙碌。合作方的电话是一个接着一个,而且巧的很,查明原因后都是simplexml_load_file解析惹的祸。

    所以这里对使用PHP来解析XML的同学提出两点注意:

  • 表面看到的不一定是真的,file_get_contents或者curl远程抓一下,看其是否是一个有效的XML
  • 特殊字符是会引起simplexml_load_file解析XML失败的,函数会报错
  •     第一家比较诡异,看源代码及IE页面,毛问题没有,函数就是报错。后来想了个办法,file_get_contents一下,发现丫的在XML数据前面和后面分别有一串数字。于是XML无法顺利解析,这个分析起来还好些,而另一个就堪称头疼了。

        XML格式如下:

    以下是代码片段:
    <Result value="true" message="Success!">
      <Item ID="8861" UserName="30121740" NickName="&#x1A;ǒˇFEΙでァ" Grade="16" Repute="168" Sex="false" WinCount="138" TotalCount="229" ConsortiaName="圣域" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="31" FightPower="3032" />
    </Result>

        初步分析是由于 里面NickName乱码导致,于是试验另一地址:

    以下是代码片段:
    <Result value="true" message="Success!">
      <Item ID="7" UserName="13792776" NickName="龙哥" Grade="1" Repute="313119" Sex="true" WinCount="0" TotalCount="0" ConsortiaName="" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="34" FightPower="0" />
    </Result>

        毛问题没有,很显然是这个NickName乱码造成的。于是开始了漫长且无奈的沟通,不过人家合作方不认为自己的文件格式有问题,且一直在强调其他合作方没有此问题。

        于是,我只能无语的说“大哥,咱的水平比不上其他合作方的啊,把我不想要的数据去掉好吗?其实我就想要个ID”。不过无果。最后得出的结论是居然告诉我要让用户去改用户名,喵了个咪的。

        于是,苦苦搜索中,发现了这么一个同病相怜的哥们《如果xml文档里含有特殊字符时该怎么办》

    以下是引用片段:
    原来,这个xml里有&符号,这个&符号在.NET里是可以正常读取的,但是在php里是不行的,php里如果加载的话会报错 

        再瞅一眼,这哥们文章里的XML格式咋和我的这么像,于是豁然开朗,这是同一家公司。最后没办法,人家不改,也只能我想办法了,用户还等着充值呢不是。于是一样,替换&符。

        其实能实现的方法很多,比如说用正则,但是我想表达的意见是,咱能按文档上面来吗?你说的是XML格式,那就要保证这个XML格式可以被解析好吧?

    同分类推荐文章

    1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
    2. Go 实验特性详解 (2026-06-21 10:05:27)
    3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

    查看更多 后端 文章 →

    建议继续学习

    1. 使用gettext来支持PHP的多语言 (累计阅读 39,270)
    2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
    3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
    4. 我的PHP,Python和Ruby之路 (累计阅读 13,147)
    5. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,789)
    6. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
    7. Redis消息队列的若干实现方式 (累计阅读 12,088)
    8. 到底什么是MVC? (累计阅读 11,866)
    9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)
    10. Rolling cURL: PHP并发最佳实践 (累计阅读 11,488)