栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP,SimpleXML,CDATA中的解码实体

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP,SimpleXML,CDATA中的解码实体

CDATA节的XML的目的是封装的文本块“为是”,否则将需要特殊字符(特别是

>
<
&
)进行转义。包含字符的CDATA节与包含的
&
普通文本节点相同
&amp;

如果解析器提出要忽略这一点,并且假装所有CDATA节点实际上只是文本节点,那么一旦有人提到“ P&O Cruises”,它就会立即中断-

&
根本不能单独存在(而不是
&amp;
,或
&somethingElse;
)。

LIBXML_NOCDATA
实际上是用SimpleXML漂亮没用,因为
(string)$foo
巧妙地结合了文本和CDATA节点的任何序列为普通PHP字符串。(人们经常注意到的东西,因为
print_r
没有。)对于诸如DOM之类的更系统的访问方法,这不一定是正确的,在DOM中,您可以独立地将文本节点和CDATA节点作为对象来操作。

它有效地做的是遍历文档,无论遇到CDATA节,它都会取走内容,对其进行转义,然后将其放回普通文本节点,或者将其与任何文本节点“合并”到任一侧。表示的文本是相同的,只是以不同的方式存储在文档中。您可以看到导出到XML的区别,如以下示例所示:

$xml_string = "<person><name>Welcome aboard this <![CDATA[P&O Cruises]]> voyage!</name></person>";$person = new SimpleXMLElement($xml_string);echo 'CDATA retained: ', $person->asXML();// CDATA retained: <?xml version="1.0"?>// <person><name>Welcome aboard this <![CDATA[P&O Cruises]]> voyage!</name></person>$person = new SimpleXMLElement($xml_string, LIBXML_NOCDATA);echo 'CDATA merged: ', $person->asXML();// CDATA merged: <?xml version="1.0"?>// <person><name>Welcome aboard this P&amp;O Cruises voyage!</name></person>

如果您要解析的XML文档包含实际上包含实体的CDATA部分,则需要采用该字符串并将其完全独立于XML取消转义。这样做的一个常见原因(除了对图书馆了解得不那么懒惰之外)是将HTML中标记的内容视为XML文档中的任何旧字符串,例如:

<Comment><SubmittedBy>IMSoP</SubmittedBy><Text><![CDATA[I'm <em>really</em> bad at keeping my answers brief <tt>;)</tt>]]></Text></Comment>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号