PHP cdata 處理(詳細介紹)_PHP教程
來源:互聯網
上載者:User
當時在網上找了一個CDATA的轉換器, 修改之後, 將CDATA標籤給過濾掉。如下
複製代碼 代碼如下:
// 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 ( '<' == $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 ' 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;
最近發現,總是有alert發出來, 說是simplexml解析出錯。
發現是原來有xml的資料是domain[test]]] >. 出現了連續的3個], 造成上面的解析函數不能處理。 <br><br>而且這個問題很難修正, 你不知道下次會不會有4, 5個]出現。 <br><br>所以決定還是將這段解析 的代碼換成DOM XML,本身 DOM的處理還是比較簡單的, <br><br>包含DOMElement, DOMDocument, DOMNodeList, DOMNode幾個 component. <br><br>對於 DOMNode有nodeValue, nodeType, nodeName的成員函數。 <br><br>首先先用loadXML將string轉化為DOMDocument對像, 再用getElementsByTagName轉化為DOMNodeList對像, 再使用->item(0)轉化為DOMNOde, 然後就可以使用上面的三種方法了。 <br><br>對於 test</aa>這種xml標籤, 要使用 attribute函數。</p><p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/328068.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/328068.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">當時在網上找了一個CDATA的轉換器, 修改之後, 將CDATA標籤給過濾掉。如下 複製代碼 代碼如下: // States: // // 'out' // '' // '!' // '![' // '![C' /...</span></p><li ><i class="layui-icon">