2011-01-22 16 views
6

¿Hay alguna función auxiliar que escapará correctamente de una cadena que se representará como una comilla simple citada como literal de cadena de JavaScript?secuencia de escape de magento para javascript

sé de jsQuoteEscape pero sólo se encarga de cotizaciones y no trata \ n & \ r etc.

así que si mi cadena es 'línea 1 \ nlineb' (es decir, dos líneas con un salto de línea entre ellos)

y utilizo

var jsvar='<?php echo $this->helper('myextension')->jsQuoteEscape($mystring); ?>'; 

voy a entrar en el contenido representado

var jsvar='line1 
line2'; 

que es un error de sintaxis.

Gracias, Eyal

Respuesta

5

$string = 'Hello 
There';      
var_dump(Mage::helper('core')->jsonEncode($string)); 
var_dump(json_encode($string)); 

he never been clear si esto que codifica un no-objeto tipos de datos de cadena como una cadena JavaScript es un efecto secundario de la codificación JSON, o si es cierto, de acuerdo con Hoyle Crockford JSON, por lo que siempre me gusta envolver mis cadenas en un objeto cuando pasa alrededor de ellos

$o = new stdClass(); 
$o->param = 'This is my 
Param';   
$json = json_encode($o);    
echo 'var data = ' . $json . ';' . "\n"; 
echo 'var jsdata = data.param'; 

Así es como manejarías esto con javascript. No hay un método específico para esto. Si está interesado en ver los métodos de ayuda que usted tiene disponible a partir de un bloque, la comprobación de los métodos

app/code/core/Mage/Core/Block/Abstract.php   
app/code/core/Mage/Core/Block/Template.php   

y si usted está tratando con una plantilla que es parte de un bloque más arriba en la cadena, obtener su clase y luego comprobar su definición

var_dump get_class($this); 
+0

Aunque, como he contestado en su propia Q, no parece una cadena de calificar como JSON tengo la sensación de que esto es un poco demasiado. (al menos en términos de sobrecarga en el lado de Javascript. Si te preocupa llamar json_encode con un objeto no, personalmente preferiría pasar la cadena como un solo miembro en una matriz y luego recortar del resultado cualquier cosa- e incluyendo el primer '[' y cualquier cosa desde y después del último ']'. Esto resulta con JS que es exactamente lo que quiere y nada más. Para ser práctico, dudo si algo (probablemente) tan ampliamente usado alguna vez se rompería. – epeleg

+0

Dicho esto, ¿podría ir con 'Mage :: helper ('core') -> jsonEncode ($ string)' o con 'json_encode ($ string)'? Tiendo a elegir el segundo ya que es más corto por un lado y parece que tiene mucho menos sobrecarga por lo que el rendimiento wo ser mejor. (¿Asumo que el segundo es solo parte de PHP? ¿O no?). – epeleg

+0

Probablemente tengas razón, aunque cada vez que me digo a mí mismo "Simplemente voy a escribir este sencillo reemplazo de cuerdas que seguramente no tendrá casos extremos inesperados", termino siendo mordido por los casos extremos. Debido a eso, he adquirido el hábito de pasar cualquier JS dinámico JS como json, como se indicó anteriormente. –

Cuestiones relacionadas