PHP cdata 处理(详细介绍)


Posted in PHP onJuly 05, 2013

当时在网上找了一个CDATA的转换器, 修改之后, 将CDATA标签给过滤掉。如下

 // States:
        //
        //     'out'
        //     '<'
        //     '<!'
        //     '<!['
        //     '<![C'
        //     '<![CD'
        //     '<![CDAT'
        //     '<![CDATA'
        //     'in'
        //     ']'
        //     ']]'
        //
        // (Yes, the states a represented by strings.) 
        //
        $state = 'out';
        $a = str_split($xml);
        $new_xml = '';
        foreach ($a AS $k => $v) {
            // Deal with "state".
            switch ( $state ) {
                case 'out':
                    if ( '<' == $v ) {
                        $state = $v;
                    } else {
                        $new_xml .= $v;
                    }
                break;
                case '<':
                    if ( '!' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                 case '<!':
                    if ( '[' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case '<![':
                    if ( 'C' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case '<![C':
                    if ( 'D' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case '<![CD':
                    if ( 'A' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case '<![CDA':
                    if ( 'T' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case '<![CDAT':
                    if ( 'A' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case '<![CDATA':
                    if ( '[' == $v  ) {
                        $cdata = '';
                        $state = 'in';
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                break;
                case 'in':
                    if ( ']' == $v ) {
                        $state = $v;
                    } else {
                        $cdata .= $v;
                    }
                break;
                case ']':
                    if (  ']' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $cdata .= $state . $v;
                        $state = 'in';
                    }
                break;
                case ']]':
   if (  '>' == $v  ) {
    $new_xml .= htmlentities($cdata);
#       $new_xml.= $cdata;
//                        $new_xml .= str_replace('>','>',
  //                                  str_replace('>','<',
    //                                str_replace('"','"',
      //                              str_replace('&','&',
        //                            $cdata))));
                        $state = 'out';
                    } else {
                        $cdata .= $state . $v;
                        $state = 'in';
                    }
                break;
            } // switch
        }
        //
        // Return.
        //
            return $new_xml;

最近发现,总是有alert发出来, 说是simplexml解析出错。

发现是原来有xml的数据是<![CDATA[domain[test]]] >. 出现了连续的3个], 造成上面的解析函数不能处理。

而且这个问题很难修正, 你不知道下次会不会有4, 5个]出现。

所以决定还是将这段解析 的代码换成DOM XML,本身 DOM的处理还是比较简单的,

包含DOMElement, DOMDocument, DOMNodeList, DOMNode几个 component.

对于 DOMNode有nodeValue, nodeType, nodeName的成员函数。

首先先用loadXML将string转化为DOMDocument对像, 再用getElementsByTagName转化为DOMNodeList对像, 再使用->item(0)转化为DOMNOde, 然后就可以使用上面的三种方法了。

对于 <aa color='red'>test</aa>这种xml标签, 要使用 attribute函数。

PHP 相关文章推荐
十天学会php(1)
Oct 09 PHP
oracle资料库函式库
Oct 09 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP中的session安全吗?
Jan 22 PHP
php验证码生成器
May 24 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 PHP
PHP的基本常识小结
Jul 05 #PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 #PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 #PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 #PHP
php记录代码执行时间(实现代码)
Jul 05 #PHP
如何修改和添加Apache的默认站点目录
Jul 05 #PHP
解析php类的注册与自动加载
Jul 05 #PHP
You might like
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
Mac下安装vue
2018/04/11 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
express express-session的使用小结
2018/12/12 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Pytorch之parameters的使用
2019/12/31 Python
python 检测图片是否有马赛克
2020/12/01 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
优秀经理事迹材料
2014/02/01 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
七一建党日演讲稿
2014/09/05 职场文书
人民的好儿女观后感
2015/06/18 职场文书
中学生运动会广播稿
2015/08/19 职场文书
素质教育培训心得体会
2016/01/19 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL
Windows server 2012搭建FTP服务器
2022/04/29 Servers
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python