php cdata,PHPcdata处理(详细介绍)_PHP教程
PHPcdata處理(詳細(xì)介紹)_PHP教程
當(dāng)時(shí)在網(wǎng)上找了一個(gè)CDATA的轉(zhuǎn)換器, 修改之后, 將CDATA標(biāo)簽給過(guò)濾掉。如下
代碼如下:
// States:
//
// 'out'
// ' // ' // ' // ' // ' // ' // ' // '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 ( ' $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 ' if ( 'D' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case ' if ( 'A' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case ' if ( 'T' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case ' if ( 'A' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case ' 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;
最近發(fā)現(xiàn),總是有alert發(fā)出來(lái), 說(shuō)是simplexml解析出錯(cuò)。
發(fā)現(xiàn)是原來(lái)有xml的數(shù)據(jù)是. 出現(xiàn)了連續(xù)的3個(gè)], 造成上面的解析函數(shù)不能處理。
而且這個(gè)問(wèn)題很難修正, 你不知道下次會(huì)不會(huì)有4, 5個(gè)]出現(xiàn)。
所以決定還是將這段解析 的代碼換成DOM XML,本身 DOM的處理還是比較簡(jiǎn)單的,
包含DOMElement, DOMDocument, DOMNodeList, DOMNode幾個(gè) component.
對(duì)于 DOMNode有nodeValue, nodeType, nodeName的成員函數(shù)。
首先先用loadXML將string轉(zhuǎn)化為DOMDocument對(duì)像, 再用getElementsByTagName轉(zhuǎn)化為DOMNodeList對(duì)像, 再使用->item(0)轉(zhuǎn)化為DOMNOde, 然后就可以使用上面的三種方法了。
對(duì)于 test這種xml標(biāo)簽, 要使用 attribute函數(shù)。
http://www.bkjia.com/PHPjc/328068.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/328068.htmlTechArticle當(dāng)時(shí)在網(wǎng)上找了一個(gè)CDATA的轉(zhuǎn)換器, 修改之后, 將CDATA標(biāo)簽給過(guò)濾掉。如下 代碼如下:// States: // // 'out' // '' // '!' // '![' // '![C' /...
本條技術(shù)文章來(lái)源于互聯(lián)網(wǎng),如果無(wú)意侵犯您的權(quán)益請(qǐng)點(diǎn)擊此處反饋版權(quán)投訴
本文系統(tǒng)來(lái)源:php中文網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的php cdata,PHPcdata处理(详细介绍)_PHP教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 部队多久可以回家一次
- 下一篇: php异步处理任务工具,php异步任务处