正常的<>不用转义就可以放到xml节点中
如<a><![CDATA[<b>abc</b>]]></a>
这样格式是正确的
但是如果b节点中也有<![CDATA[]]>该怎么办呢
如下面这样<a><![CDATA[<b><![CDATA[abc]]></b>]]></a>
就会是格式错误,有什么方法解决么?
难道只能用把><这些转成⁢一类的方法来解决吗
如<a><![CDATA[<b>abc</b>]]></a>
这样格式是正确的
但是如果b节点中也有<![CDATA[]]>该怎么办呢
如下面这样<a><![CDATA[<b><![CDATA[abc]]></b>]]></a>
就会是格式错误,有什么方法解决么?
难道只能用把><这些转成⁢一类的方法来解决吗
<a><![CDATA[<b><![CDATA[abc]]></b>]]></a>
CDATA里面就不要用CDATA了,没什么意义
安全的方法<![CDATA[abc]]></b>]]>
存xmlencode之后的代码
我前台通常是发一个查询参数到后台,然后后台根据参数查出数据后将数据打成xml格式返回
如:"a"表中的"a_a"字段里的数据是"abc""<>#$%"""(注意这个字段里的数据可以是html代码的,当然也会出现我上面说的那个<b><![CDATA[abc]]></b>)
然后返回前台得到的实际数据是xml格式字符串:
如下:<a><a_a><![CDATA[abc""<>#$%""]]></a_a></a>
为了方便,并没有把像引号和尖括号这样一类的特殊字符做转义处理,而是用CDATA这个方法来解决,然后现在遇到问题了,就是当字段中存在像CDATA这种xml字符串时,或者确切的说是有"]]>"时就会截断标签,那么按两位的说法来看就只能把数据中的>做转义处理了,如此以来拼xml返回前台时就不回出错,而转回来就只能在前台得到后用js来转回来。或者说是我的数据库设计就有问题,不应该这样存数据。我还有好多页面的布局一类的html代码(如页头页尾)是直接放在xml文件里,然后js去读取写到html里凑成页面,呃,或者是读到xml类型数据再和xslt合并出页面。总之就是xml里的特殊字符实在让我头痛感谢楼上两位的回复
It basically closes the current CDATA section and opens a new one, deconstructing the "unwanted termination tag" into ]] and > and putting them in the separate sections."]]><![CDATA["可中斷原本的CDATA的註解,以樓主的情形來說,
可改成<a><![CDATA[<b><![]]><![CDATA[CDATA[abc]]]]><![CDATA[></b>]]></a>
雖然有點難辨識,但我試過的確可行!
參考來源https://github.com/symphonycms/symphony-2/pull/69