源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

PHP cdata 处理(详细介绍)

  • 时间:2021-07-12 11:22 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP cdata 处理(详细介绍)
当时在网上找了一个CDATA的转换器, 修改之后, 将CDATA标签给过滤掉。如下
[u]复制代码[/u] 代码如下:
 // 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函数。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部