2011-01-22 7 views
6

Esiste una funzione di supporto che eviti correttamente una stringa da rendere come una virgoletta singola quotata stringa JavaScript letterale?magento escape string per javascript

io sappia jsQuoteEscape ma gestisce solo le citazioni e non tratta \ n & \ r ecc

quindi se la mia stringa è 'linea 1 \ nlineb' (cioè due linee con una nuova linea tra di loro)

e io uso

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

mi metterò nel contenuto reso

var jsvar='line1 
line2'; 

che è un errore di sintassi.

Grazie, Eyal

risposta

5

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

Ho never been clear se questa codifica un non-oggetto tipi di dati stringa come una stringa JavaScript è un effetto collaterale della codifica JSON, o se è vero, secondo Hoyle Crockford JSON, così mi piace sempre di avvolgere le mie corde in un oggetto quando si passa in giro

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

Ecco come gestirlo con javascript. Non esiste un metodo creato appositamente per questo. Se siete interessati a vedere i metodi di supporto che si ha a disposizione da un blocco, checkout i metodi in

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

e se hai a che fare con un modello che fa parte di un isolato più in alto nella catena, ottenere il suo classe e quindi controllare la sua definizione

+0

Anche se, come ho risposto sul tuo Q, una stringa non sembra qualificarsi come json ho la sensazione che questo è un po 'troppo. (almeno in termini di overhead sul lato javascript. Se ti preoccupi di chiamare json_encode con un non oggetto, preferirei personalmente passare la stringa come un singolo membro in un array e quindi ritagliare dal risultato qualsiasi cosa- Questo risultato con JS è esattamente quello che vuoi e niente di più Per essere pratico, dubito che qualcosa (probabilmente) così ampiamente usato sarebbe mai rotto – epeleg

+0

Detto questo, andresti con 'Mage :: helper ('core') -> jsonEncode ($ stringa)' o con 'json_encode ($ stringa)'? Tendo a scegliere il secondo come si accorcia da una parte e sembra che abbia molto meno overhead quindi prestazioni wo stare meglio (Suppongo che il secondo sia solo una parte di PHP o no?). – epeleg

+0

Probabilmente hai ragione, anche se ogni volta mi sono detto "scriverò semplicemente questa semplice sostituzione di corde che sicuramente non avrà casi limite inaspettati", finisco per essere morso dai casi limite. Per questo motivo ho preso l'abitudine di passare qualsiasi JS vars dinamico come per JSON, come sopra. –

Problemi correlati