2011-11-27 9 views
10

Come posso rimuovere i blocchi (//<![CDATA[ , //]]>); tag all'interno di un elemento script.Come rimuovere `// <! [CDATA [` e end `//]]>`?

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

sembra che può essere fatto con preg_replace() ma havent trovato una soluzione che funziona per me.

Quale espressione regolare dovrei usare?

+5

Solo curioso il motivo per cui si desidera rimuovere quelle due righe? –

+0

bomanden: @JonathanM ha ragione, potrebbe non essere necessario rimuovere questi elementi. Vedi [Quando è necessaria una sezione CDATA all'interno di un tag script?] (Http://stackoverflow.com/questions/66837/when-is-a-cdata-section-necessable-within-a-Script-tag) e [Is CDATA è davvero necessario?] (Http://stackoverflow.com/questions/4215261/is-cdata-really-necessario). Pensaci su. – Tadeck

+0

Ok - È solo che il Javascript non attiva .. quindi il codice non viene eseguito .. È quando uso la soluzione di Alan. Ma grazie per le informazioni. – bomanden

risposta

11

La seguente espressione regolare lo farà ...

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

CodePad.

+0

Grazie Alex .. ma era la soluzione di Alan Moore che funzionava – bomanden

+0

@bomanden La mia soluzione non funzionava? – alex

+0

Ciao Alex .. No purtroppo no. Sapete perché - ma ha fatto funzionare Alans. Forse puoi vedere la differenza tra le due soluzioni. Grazie per l'input. – bomanden

6

Se si deve ...

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

Questo rimuoverà tutta la riga contenente ogni tag senza rovinare l'indentazione del codice chiuso.

16

Non è necessario regex per una stringa statica.

sostituire quelle parti dei testi con nulla:

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

Cosa succede se include quel testo come parte del corpo 'script', forse come una stringa? – alex

+0

Mi piace questa soluzione molto meglio dell'opzione Regex, molto più pulita da leggere. –

0

uso str_replace() invece di preg_replace() è molto più facile

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

Si può anche provare,

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

io uso come questo per rimuovere <![CDATA[]] ma su una sola riga ora funziona per me , non so se per più linee di stringa.

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)); 
} 
Problemi correlati