2012-09-14 49 views
-1

我想內更換裏面的東西CDATA用PHP

<!CDATA[[Text
test
test]]>

&#xA;用PHP來取代chr(10)但我在正則表達式非常差。

+0

這是非常不清楚。你能詳細解釋一下嗎? –

+0

我有一個XML。在CDATA中有不同的節點值。在CDATA內有「換行」/「chr(10)」。我想用相應的HTML實體「 」替換此換行符。 –

+0

爲什麼要麻煩?這是一個CDATA塊 - 您不必在CDATA塊中編碼實體。 –

回答

0
$xml = "cc\n<!CDATA[[Text\ntest\ntest]]>\naa\nbb\n"; 
$callback = function($m) { 
    return '<!CDATA[[' . preg_replace("~" . chr(10) . "~s", '&#xA;', $m[1]) . ']]>'; 
}; 
echo preg_replace_callback('~<!CDATA\[\[(.+?)\]\]>~s', $callback, $xml); 

附:你可以做到這一點沒有preg_replace_callback,但它看起來比把所有的邏輯放入preg_replace更好...

0

爲什麼要使用正則表達式?

$final = str_replace(chr(10), '&#xA;', $cdata); 
+0

我有一個洞XML與CDATA中的值不同的節點。在CDATA內有「換行」/「chr(10)」。我想用相應的HTML實體「 」替換此換行符。 –

+0

你如何解析這個提要?遍歷節點並在每個節點上使用我的上面的代碼片段 – discomatt