【问题标题】:Right way to escape strings in PHP when making XML [duplicate]制作XML时在PHP中转义字符串的正确方法[重复]
【发布时间】:2011-09-08 23:29:01
【问题描述】:

可能重复:
How do you make strings XML“safe”?

我正在制作 xml,部分代码如下所示:

echo 'description="' .$description. '" ';

当有撇号是描述变量时,代码可以正常工作,但是当有撇号时,代码会中断。

什么是对我来说转义字符串以使其不会破坏整个 xml 的正确方法?

【问题讨论】:

    标签: php


    【解决方案1】:

    如果某些文本破坏了您的 XML 代码,您应该使用 CDATA

    考虑这段代码

      <?xml version="1.0" encoding="utf-8"?>
      <Result>
        <html>
          <p>
            Returning value
          </p>
        </html>
      </Result>
    

    应该改写成

      <?xml version="1.0" encoding="utf-8"?>
      <Result>
        <html>
          <![CDATA[<p>
            Returning value
          </p>]]>
        </html>
      </Result>
    

    所以&lt;html&gt;标签中的数据被视为字符串,否则&lt;p&gt;将被视为XML标签(在第一个示例中)

    【讨论】:

      【解决方案2】:

      我会像瘟疫一样避免使用 CDATA,尤其是当您的 XML 内容要被很好地处理时。 CDATA 只是隐藏了它包裹的任何东西。我总是使用 htmlentities() 来确保,尽管大多数情况下你会遇到 & 符号的麻烦。此外,您不能使用 CDATA 参数,因此其他建议无法解决您的问题。

      现在,看看您的问题,似乎更多的是关于属性中的引号字符。首先,你能做一个元素而不是一个属性吗?原因当然是描述中包含各种字符的风险更高,因此最好将其视为纯文本,而不会有 XML 解析的危险。

      话虽如此,总可以尝试一下;

      echo 'description="' .str_replace ( array('"',"'"), '&quot;', $description) . '" ';
      

      当然,如果有用,请将其包装在一个函数中。

      【讨论】:

      • 我在尝试在数据 (£) 中插入带有井号的字符串时遇到问题,并且 htmlentities 不起作用,我认为这不是正确的答案,除非出于某种原因我正在这样做有事吗。使用 htmlentities,它返回的字符串不被 DOMDocument::loadXML 函数接受。还有其他建议吗?
      【解决方案3】:

      您可以使用 CDATA 或 HTML 转义字符。 CDATA 可能是一种更简单的方法,因为您的代码将普遍转义所有字符并如下所示:

      <tag><![CDATA[your data here]]></tag>
      

      http://en.wikipedia.org/wiki/XML#Escaping http://en.wikipedia.org/wiki/CDATA http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 2015-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 2014-07-23
        • 1970-01-01
        相关资源
        最近更新 更多