【问题标题】:Handling Symbols with PHP xml parser使用 PHP xml 解析器处理符号
【发布时间】:2011-06-02 20:06:57
【问题描述】:

我正在使用 PHP 的 xml 解析器将 xml 写入文本文件脚本。我用@ 符号分隔属性,用| 分隔数据。符号,我注意到当我打开文本文件时,符号被视为它们自己的数据。

i.e. <equation valid="yes">For this theorem assume X < Y and Z & A = 0</equation>
should have output @yes@ |For this theorem assume X < Y and Z & A = 0|
but instead I have @yes@ |For this theorem assume X| |<| |Y| and Z | |&| | A = 0|

所以我相信正在发生的是任何依赖 &[a-z]+; 的符号。或 &[0-9]+;被视为两个标签之间的不同数据。我尝试了preg_replace("/&amp;([a-z]+);/","\1",$data) 和相同的数字,只是有字母/数字供我稍后格式化,但这似乎没有做任何事情。如何让 xml 解析器将这些符号识别为数据的一部分?

Edit1:我刚刚也尝试用 \& 替换所有 & 但这也没有做任何事情,我只是在我的数据分隔符之前得到了反斜杠。

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    我相信您是在询问字符串中的特殊字符? 如果是这样,您需要使用 ascii 等价物,即

        For this theorem assume X < Y and Z & A = 0
        Becomes
        For this theorem assume X &lt; Y and Z &amp; A &#61; 0
    

    【讨论】:

    • 对,这就是问题所在。我认为我解释得不好,当 php 的 xml 解析器遇到“&”符号时,它认为它与前一个节点位于不同的数据节点中,我不确定我应该更改什么以便它可以识别 & [a-z]+/[0-9]+;正则表达式不是一个新的数据节点。
    • 您在 XML 文档中指定的编码是什么?
    • 您是否可以将其保存为双字节?尝试将 UTF-16 指定为编码类型。
    • xmlparser 抛出错误,我认为它只接受 UTF-8、ISO-8859-1 和 US-ASCII 编码。我已将 AMP 一词的所有与号正则表达式作为临时修复,以便我可以继续测试我的代码,但我很想听到正确的解决方案。
    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 2010-12-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多