Passa una stringa PHP a una variabile JavaScript (e sfuggi alle nuove righe)

Qual è il modo più semplice per codificare una stringa PHP per l’output su una variabile JavaScript?

Ho una stringa PHP che include citazioni e newline. Ho bisogno che il contenuto di questa stringa sia inserito in una variabile JavaScript.

Normalmente, vorrei solo build il mio JavaScript in un file PHP, a la:

 var myvar = "";  

Tuttavia, questo non funziona quando $myVarValue contiene citazioni o newline.

Espansione sulla risposta di qualcun altro:

  

L’uso di json_encode () richiede:

  • PHP 5.2.0 o successivo
  • $myVarValue codificato come UTF-8 (o US-ASCII, ovviamente)

Poiché UTF-8 supporta Unicode completo, dovrebbe essere sicuro convertirlo al volo.

Si noti che poiché json_encode sfugge alle barre in avanti, anche una stringa che contiene verrà sfuggita in modo sicuro per la stampa con un blocco di script.

codificalo con JSON

 function escapeJavaScriptText($string) { return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); } 

Ho avuto un problema simile e capisco che quanto segue è la soluzione migliore:

  

Tuttavia, il link che micahwittman ha pubblicato suggerisce che ci sono alcune piccole differenze di codifica. La funzione rawurlencode() di PHP dovrebbe essere conforms a RFC 1738 , mentre non sembra esserci stato alcuno sforzo con il decodeURIComponent() di Javascript.

La versione paranoica: sfuggire a ogni singolo personaggio .

 function javascript_escape($str) { $new_str = ''; $str_len = strlen($str); for($i = 0; $i < $str_len; $i++) { $new_str .= '\\x' . sprintf('%02x', ord(substr($str, $i, 1))); } return $new_str; } 

EDIT: Il motivo per cui json_encode() potrebbe non essere appropriato è che a volte, è necessario impedire " di essere generato, ad es.

 
  

o

  

La soluzione di Micah di seguito ha funzionato per me poiché il sito che dovevo personalizzare non era in UTF-8, quindi non potevo usare json; Lo voterei, ma il mio rappresentante non è abbastanza alto.

 function escapeJavaScriptText($string) { return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); } 

htmlspecialchars

Descrizione

 string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] ) 

Alcuni caratteri hanno un significato speciale in HTML e dovrebbero essere rappresentati dalle quadro HTML se vogliono preservare i loro significati. Questa funzione restituisce una stringa con alcune di queste conversioni fatte; le traduzioni fatte sono quelle più utili per la programmazione web quotidiana. Se si richiedono la traduzione di tutte le quadro di carattere HTML, utilizzare invece htmlentities ().

Questa funzione è utile per impedire al testo fornito dall’utente di contenere il markup HTML, ad esempio in una bacheca di messaggi o in un libro degli ospiti.

Le traduzioni eseguite sono:

 * '&' (ampersand) becomes '&' * '"' (double quote) becomes '"' when ENT_NOQUOTES is not set. * ''' (single quote) becomes ''' only when ENT_QUOTES is set. * '<' (less than) becomes '<' * '>' (greater than) becomes '>' 

http://ca.php.net/htmlspecialchars

Puoi inserirlo in un DIV nascosto, quindi assegnare l’innerHTML del DIV alla tua variabile JavaScript. Non devi preoccuparti di sfuggire a qualcosa. Assicurati di non inserire HTML non valido.

Potresti provare

  

Non eseguirlo anche con addslashes() ; se sei nel contesto della pagina HTML, il parser HTML può ancora vedere il , anche mid-string, e supporre che sia la fine del JavaScript:

 alert(document.cookie);'; ?>  
  1. Non farlo. Usa Ajax, mettilo negli attributi data-* nel tuo codice HTML, o qualcos’altro significativo. L’uso di script inline rende le pagine più grandi e potrebbe non essere sicuro o consentire comunque agli utenti di rovinare il layout , a meno che …

  2. … tu fai una funzione più sicura:

     function inline_json_encode($obj) { return str_replace('
    

    Non sono sicuro che questa sia una pratica sbagliata o no, ma il mio team e io abbiamo utilizzato una soluzione mista html, JS e php. Iniziamo con la stringa PHP che vogliamo inserire in una variabile JS, chiamiamola:

     $someString 

    Successivamente usiamo gli elementi del modulo nascosti in-page e abbiamo il loro valore impostato come stringa:

     

    Quindi si tratta semplicemente di definire una variabile JS attraverso document.getElementById:

      

    Ora puoi usare la variabile JS “moonUnitAlpha” ovunque tu voglia afferrare quel valore di stringa PHP. Questo sembra funzionare molto bene per noi. Vedremo se resiste all’uso intensivo.

  3. Se usi un motore di template per build il tuo HTML allora puoi riempirlo con quello che vuoi!

    Dai un’occhiata a XTemplates . È un motore di template piacevole, open source, leggero.

    Il tuo HTML / JS sarebbe simile a questo: