处理内容有&特殊字符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

 /**
* XML编码
* @param mixed $data 数据
* @param string $root 根节点名
* @param string $item 数字索引的子节点名
* @param string $attr 根节点属性
* @param string $id 数字索引子节点key转换的属性名
* @param string $encoding 数据编码
* @return string
*/
function xml_encode($data, $root='think', $item='item', $attr='', $id='id', $encoding='utf-8') {
if(is_array($attr)){
$_attr = array();
foreach ($attr as $key => $value) {
$_attr[] = "{$key}=\"{$value}\"";
}
$attr = implode(' ', $_attr);
}
$attr = trim($attr);
$attr = empty($attr) ? '' : " {$attr}";
$xml = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";
$xml .= "<{$root}{$attr}>";
$xml .= data_to_xml($data, $item, $id);
$xml .= "</{$root}>";
return $xml;
} /**
* 数据XML编码
* @param mixed $data 数据
* @param string $item 数字索引时的节点名称
* @param string $id 数字索引key转换为的属性名
* @return string
*/
function data_to_xml($data, $item='item', $id='id') {
$xml = $attr = '';
foreach ($data as $key => $val) {
if(is_numeric($key)){
$id && $attr = " {$id}=\"{$key}\"";
$key = $item;
}
$xml .= "<{$key}{$attr}>";
// xml 转义特殊字符 如& 以<![CDATA[标记开始,以]]>标记结束,必须是最终文本值才能加上这个<![CDATA[xxx]]>
$xml .= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : '<![CDATA['.$val.']]>';
$xml .= "</{$key}>";
}
return $xml;
}

---------------------------------
&lt; < 小于号
&gt; > 大于号
&amp; & 和
&apos; ' 单引号
&quot; " 双引号
实体必须以符号"&"开头,以符号";"结尾。 注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。
剩下的都是合法的,为了减少出错,使用实体是一个好习惯。

基本的html转义字符特殊字符
字符 十进制    转义字符
“      "   &quot;
&     &   &amp;
<     <   &lt;
>     >   &gt;
空格    &nbsp;

-----------------------------

处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>的更多相关文章

  1. iOS - XML 数据解析

    前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...

  2. Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集

    XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...

  3. 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据

    有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这 ...

  4. Asp.net mvc返回Xml结果,扩展Controller实现XmlResult以返回XML格式数据

    我们都知道Asp.net MVC自带的Action可以有多种类型,比如ActionResult,ContentResult,JsonResult……,但是很遗憾没有支持直接返回XML的XmlResul ...

  5. mvc 返回 xml

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  6. 使用jquery处理ajax返回XML

    JS代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...

  7. 返回xml过长时被nginx截断的解决办法

    返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...

  8. PHP AJAX 返回XML数据

    例子:利用AJAX间接访问数据库,查出Nation表中的数据,返回XML数据,并将Nation表中的数据显示在下拉列表框中 外层建一个下拉列表框 </select> JQurey代码 $( ...

  9. Sql语句直接返回XML文件

    通过Sql语句直接返回XML文件 select UserID,UserName,AccountName,LoginPassword from users for xml raw('Users') ,r ...

随机推荐

  1. springMVC访问 WEB-INF 下的 jsp 和 html

    配置freemarker,记得加上jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xml ...

  2. vue---设置缩进为4个空格

    在使用vue-cli的时候,我们发现,默认编辑的时候,使用的缩进都是2个空格,即使是是编辑器设置了4个空格,在编译的时候,还是以2个空格进行缩进,那么如果将vue设置为4个空格呢? 具体方法在根目录找 ...

  3. Js中对id和class属性进行模糊查询

    如题,从例子说明: <div id="divid" class="divclass" > <a id="divid-a" ...

  4. python中的range与xrange

    range 也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中. class range(stop) class rang ...

  5. ZOJ 3777 - Problem Arrangement - [状压DP][第11届浙江省赛B题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds      Me ...

  6. 【紫书】Quadtrees UVA - 297 四叉树涂色

    题意:前序遍历给出两个像素方块.求两个方块叠加后有几个黑色格子. 题解:每次读进来一个方块,就在二维数组上涂色.每次把白色涂黑就cnt++: 具体递归方法是以右上角坐标与边长为参数,每次通过几何规律往 ...

  7. UDR rsync

    1. SOCK_DGRAM  UDP packets SOCK_STREAM   TCP 不同的协议下的 套接字 数据包 面向数据的 面向连接的 套接字 2. 数据 UDP 文件 TCP https: ...

  8. FW 常见的性能测试工具有: loadRunner/netperf/httperf/apache_ab/Apache JMeter

    常见的性能测试工具有: loadRunner/netperf/httperf/apache_ab/Apache JMeter , 其中loadRunner属于付费软件,所以在这里不做介绍 netper ...

  9. 【Loadrunner】Loadrunner Vuser 两种运行方式【error:not enough memory解决方案】

    Loadrunner Vuser 两种运行方式 报错如下解决方案: 报错原因:都消息内存,之前用户是按线程跑,一个进程开了多个线程,其中有部分内存是这些线程共享的,出错应该是内存出现冲突了不够用了.现 ...

  10. linux平台mysql密码设破解

    1.先停止mysql服务 service mysqld stop 2.启动mysql服务 并跳过权限认证 mysqld_safe --skip-grant-tables 3.打开另外一个终端 登录my ...