处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>
// xml 转义特殊字符 如&'" <![CDATA["标记开始,以"]]>标记结束
不能直接把data进行for循环,否则里面的数组对象就变成一个对象字符了// xml 转义特殊字符 如&'" <![CDATA["标记开始,以"]]>标记结束
$xml .= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : '<![CDATA['.$val.']]>';必须是最终文本值才能加上这个<![CDATA[xxx]]>测试xml特殊字符&&&#@R<>>d?#dfasf*()@!~-=+_''"":;,./ThinkPHP/Common/functions.php
1 /** 2 * XML编码 3 * @param mixed $data 数据 4 * @param string $root 根节点名 5 * @param string $item 数字索引的子节点名 6 * @param string $attr 根节点属性 7 * @param string $id 数字索引子节点key转换的属性名 8 * @param string $encoding 数据编码 9 * @return string10 */11 function xml_encode($data, $root='think', $item='item', $attr='', $id='id', $encoding='utf-8') {12 if(is_array($attr)){13 $_attr = array();14 foreach ($attr as $key => $value) {15 $_attr[] = "{ $key}=\"{ $value}\"";16 }17 $attr = implode(' ', $_attr);18 }19 $attr = trim($attr);20 $attr = empty($attr) ? '' : " { $attr}";21 $xml = " ";22 $xml .= "<{ $root}{ $attr}>";23 $xml .= data_to_xml($data, $item, $id);24 $xml .= " ";25 return $xml;26 }27 28 /**29 * 数据XML编码30 * @param mixed $data 数据31 * @param string $item 数字索引时的节点名称32 * @param string $id 数字索引key转换为的属性名33 * @return string34 */35 function data_to_xml($data, $item='item', $id='id') {36 $xml = $attr = '';37 foreach ($data as $key => $val) {38 if(is_numeric($key)){39 $id && $attr = " { $id}=\"{ $key}\"";40 $key = $item;41 }42 $xml .= "<{ $key}{ $attr}>";43 // xml 转义特殊字符 如& 以标记结束,必须是最终文本值才能加上这个44 $xml .= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : '';45 $xml .= " ";46 }47 return $xml;48 }
---------------------------------
< < 小于号> > 大于号& & 和' ' 单引号" " 双引号 实体必须以符号"&"开头,以符号";"结尾。 注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。基本的html转义字符特殊字符
字符 十进制 转义字符“ " "& & &< < <> > >空格   -----------------------------