2011-11-27 58 views
10

¿Cómo puedo eliminar los bloques (//<![CDATA[ , //]]>); etiquetas dentro de un elemento script.Cómo eliminar `// <! [CDATA [` y end `//]]>`?

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

parece que se puede hacer con preg_replace() pero havent encontró una solución que funciona para mí.

Lo que debería utilizar expresiones regulares?

+5

Sólo por curiosidad, ¿por qué desea quitar esas dos líneas? –

+0

bomanden: @JonathanM tiene razón, es posible que no necesite eliminar estos elementos. Consulte [¿Cuándo es necesaria una sección CDATA dentro de una etiqueta de script?] (Http://stackoverflow.com/questions/66837/when-is-a-cdata-section-necessary-within-a-script-tag) y [Is CDATA realmente necesario?] (Http://stackoverflow.com/questions/4215261/is-cdata-really-necessary). Piénsalo. – Tadeck

+0

Ok - Es solo que el Javascript no se dispara ... por lo que el código no se ejecuta ... Es cuando uso la solución de Alan. Pero gracias por la información. – bomanden

Respuesta

11

La siguiente expresión regular lo hará ...

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

CodePad.

+0

Gracias Alex .. pero fue la solución de Alan Moore que trabajó – bomanden

+0

@bomanden ¿Mi solución no funciona? – alex

+0

Hola Alex .. Desafortunadamente no. Sí, sé por qué, pero tengo un Alans trabajando. Quizás pueda ver la diferencia entre las dos soluciones. Gracias por su aporte. – bomanden

6

Si usted debe ...

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

Esto eliminará la línea entera que contiene cada etiqueta sin estropear la sangría de código cerrado.

16

No es necesario expresión regular para una cadena estática.

Reemplazar las partes de los textos con nada:

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

¿Qué pasa si incluye ese texto como parte del cuerpo del 'script', quizás como una cadena? – alex

+0

Me gusta esta solución mucho mejor que la opción Regex, mucho más limpia para leer. –

0

uso str_replace() en lugar de preg_replace() que es mucho más fácil

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

También puede tratar,

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

utilizo como esto para eliminar <![CDATA[]] pero en una sola línea ahora funciona para mí , no sé si para cadena de línea múltiple.

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)); 
} 
Cuestiones relacionadas