Domanda

Sono la generazione di un javascript nel mio codice PHP, e ho bisogno di assegnare alcune variabili php a variabili JavaScript. Purtroppo, a volte le mie variabili PHP contengono virgolette. per esempio:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";

genererà un errore di javascript, perché il javascript risultante sarà simile a questa:

<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';

So che posso usare espressioni regolari su $ pippo per sostituire tutti i marchi ' con \' ma questo è difficile per vari motivi. C'è qualcosa che posso fare a corto di che? Qualcosa di simile alla funzione perl q() ...

È stato utile?

Soluzione

Ho provato a fare questo?

$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';

See: http://php.net/manual/en/function.addslashes .php

Altri suggerimenti

Questo dovrebbe essere un passo nella giusta direzione:

addcslashes($str, "\"\r\n\\\t/\0..\37");

Sei sicuro? Non è:

var foo = ''Dis here be a "string"'

Al fine di evitare la doppia 'try:

$foo = "\'Dis here be a \"string\"";

o

$foo = '\\\'Dis here be a "string"';

E 'anche interessante notare che è possibile utilizzare un file PHP come un file JavaScript

<script type="text/javascript" src="js/main.php"></script>

E tu sei in grado di eseguire codice PHP in quel file, così come uscita codice JavaScript da eco da PHP.

Dal momento che si sta utilizzando il valore finale in JavaScript, userei json_encode:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";

E sarà trasmesso correttamente:

<script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>

Avviso non ho messo un ulteriore set di virgolette intorno alla funzione json_encode. Si aggiungerà le virgolette necessarie per renderlo una stringa JavaScript valida automaticamente.

La risposta di Frank Farmer è interessante, ma è sfuggire alcune cose che non hanno bisogno di essere sfuggito, come le schede.

Prova questo frammento di codice, funziona bene:

<script type="text/javascript">
    alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>

Dal momento che sto sempre connesso a un database nei miei script PHP che passano il testo direttamente in stringhe di Javascript, mi appoggio a real_escape_string a fare il mio lavoro sporco. addslashes () non gestisce a capo e quelle volte intrufolarsi stringhe sto passando a Javascript.

Un semplice $sql->real_escape_string($string) rende tutto meglio, in fuga qualunque sia il database sputa fuori in una forma Javascript da usare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top