首页 >后端开发 >php教程 >PHP cdata 处理(详细介绍)_php技巧

PHP cdata 处理(详细介绍)_php技巧

WBOY
WBOY原创
2016-05-17 08:56:541096浏览

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

复制代码 代码如下:

 // 状态:
        //
        //     'out'
        //     '        //     '        //     '& LT; !['
        //     '        //     '        //     '        //     '        //     'in'
        //     ']'
        //     ']]'
        //
        //(是的,状态 a 由字符串表示。)
//
        $state = 'out';
        $a = str_split($xml);
        $new_xml = '';
        foreach ($a AS $k => $v) {
            // 处理“state”。
            switch ( $state ) {
                case 'out':
                    if ( '                        $州 = $ v;
                    } else {
                        $new_xml .= $v;
                    }
                中断;
                case '                    if ( '!' == $v  ) {
                        $state = $state 。 $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                   }
                Break;
                 case '                    if ( '[' == $v  ) {
                        $状态 = $状态 . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
                中断;
                case '                   if ( 'C' == $v  ) {
                       $状态 = $状态 . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                   }
                中断;
                case '                    if ( 'D' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                   }
                中断;
                case '                    if ( 'A' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                   }
                中断;
                case '                    if ( 'T' == $v  ) {
                        $state = $state . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                    }
               中断;
                case '                   if ( 'A' == $v  ) {
                        $州 = $州 . $v;
                    } else {
                        $new_xml .= $state . $v;
                        $state = 'out';
                   }
               break;
                case '                    if ( '[' == $v  ) {
                        $cdata = '';
                       $state = 'in';
                    } else {
                        $new_xml .= $state 。 $v;
                        $state = 'out';
                   }
                中断;
                case 'in':
                    if ( ']' == $v ) {
                        $state = $v;
                    } else {
                       $cdata .= $v;
                    }
                中断;
                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';
                   }
                中断;
            } // switch
        }
        //
        // 返回。
        //
            return $new_xml;

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

发现原来有xml的数据是。 出现了连续的 3 个],导致上面的解析函数无法处理。

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

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

包含 DOMElement, DOMDocument, DOMNodeList, DOMNode 几个组件。

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

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

对于 test这种xml标签,要使用属性函数。
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn