2011-11-27 231 views
10

如何刪除(//<![CDATA[ , //]]>)塊; script元素內的標籤。如何刪除``<![CDATA [`和結束`//]]>?

<script type="text/javascript"> 
    //<![CDATA[ 
    var l=new Array(); 
    .......................... 
    .......................... 
    //]]> 
</script> 

看起來可以用preg_replace()完成,但還沒有找到適合我的解決方案。

我會用什麼樣的正則表達式?

+5

只是好奇,爲什麼你要刪除這兩條線? –

+0

bomanden:@JonathanM是對的,你可能不需要刪除這些元素。參見[腳本標記中何時需要CDATA節?](http://stackoverflow.com/questions/66837/when-is-a-cdata-section-necessary-within-a-script-tag)和[Is CDATA真的有必要嗎?](http://stackoverflow.com/questions/4215261/is-cdata-really-necessary)。想一想。 – Tadeck

+0

好的 - 它只是JavaScript不會激發..所以代碼不會執行..這是當我使用艾倫的解決方案。 但是,謝謝你的信息。 – bomanden

回答

11

下面的正則表達式會做...

$removed = preg_replace('/^\s*\/\/<!\[CDATA\[([\s\S]*)\/\/\]\]>\s*\z/', 
         '$1', 
         $scriptText); 

CodePad

+0

感謝亞歷克斯..但這是艾倫摩爾的解決方案,工作 – bomanden

+0

@bomanden我的解決方案不工作? – alex

+0

嗨亞歷克斯.. 沒有遺憾的不是。知道爲什麼 - 但得到了阿蘭斯的工作。 也許你可以看到兩種解決方案之間的區別。 感謝您的意見。 – bomanden

6

如果你必須...

$s = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $s); 

這將刪除含不會弄亂封閉代碼的縮進每個標籤的整條生產線。

16

對於靜態字符串,您不需要正則表達式。

替換任何文本的那些部分:

$string = str_replace("//<![CDATA[","",$string); 
$string = str_replace("//]]>","",$string); 
+0

如果它包含該文本作爲腳本主體的一部分,可能是一個字符串呢? – alex

+0

我喜歡這個解決方案比正則表達式更好,閱讀更清晰。 –

0

使用str_replace(),而不是preg_replace()它容易得多

$var = str_replace('<![CDATA[', '', $var); 
$var = str_replace(']]','',$var); 
echo $var; 
1

您也可以嘗試,

$s=str_replace(array("//<![CDATA[","//]]>"),"",$s); 
0

我用像這刪除<![CDATA[]]但現在在單線上爲我工作,不知道是否爲多行字符串。

preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas); 
$string_result_after_this = $datas[1][0]; 
0
$nodeText = '<![CDATA[some text]]>'; 
$text = removeCdataFormat($nodeText);  

public function removeCdataFormat($nodeText) 
{ 
    $regex_replace = array('',''); 
    $regex_patterns = array(
     '/<!\[CDATA\[/', 
     '/\]\]>/' 
    ); 
    return trim(preg_replace($regex_patterns, $regex_replace, $nodeText)); 
}