【发布时间】:2011-09-08 23:29:01
【问题描述】:
我正在制作 xml,部分代码如下所示:
echo 'description="' .$description. '" ';
当有撇号是描述变量时,代码可以正常工作,但是当有撇号时,代码会中断。
什么是对我来说转义字符串以使其不会破坏整个 xml 的正确方法?
【问题讨论】:
标签: php
我正在制作 xml,部分代码如下所示:
echo 'description="' .$description. '" ';
当有撇号是描述变量时,代码可以正常工作,但是当有撇号时,代码会中断。
什么是对我来说转义字符串以使其不会破坏整个 xml 的正确方法?
【问题讨论】:
标签: php
如果某些文本破坏了您的 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>
所以<html>标签中的数据被视为字符串,否则<p>将被视为XML标签(在第一个示例中)
【讨论】:
我会像瘟疫一样避免使用 CDATA,尤其是当您的 XML 内容要被很好地处理时。 CDATA 只是隐藏了它包裹的任何东西。我总是使用 htmlentities() 来确保,尽管大多数情况下你会遇到 & 符号的麻烦。此外,您不能使用 CDATA 参数,因此其他建议无法解决您的问题。
现在,看看您的问题,似乎更多的是关于属性中的引号字符。首先,你能做一个元素而不是一个属性吗?原因当然是描述中包含各种字符的风险更高,因此最好将其视为纯文本,而不会有 XML 解析的危险。
话虽如此,总可以尝试一下;
echo 'description="' .str_replace ( array('"',"'"), '"', $description) . '" ';
当然,如果有用,请将其包装在一个函数中。
【讨论】:
您可以使用 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
【讨论】: