Frage

Ich bin zu erzeugen einige Javascript in meinem PHP-Code, und ich brauche einige PHP-Variablen JavaScript-Variablen zugewiesen werden soll. Leider enthalten manchmal meine PHP-Variablen Anführungszeichen. zum Beispiel:

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

wird ein JavaScript-Fehler erzeugen, da die resultierende Javascript wird wie folgt aussehen:

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

Ich weiß, dass ich auf $ foo verwenden regexp können alle ' Markierungen mit \' zu ersetzen, aber das ist schwer aus verschiedenen Gründen. Gibt es etwas, was ich kann, dass kurze tun? So etwas wie Perl q() Funktion ...

War es hilfreich?

Lösung

versucht das zu tun?

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

Siehe auch: http://php.net/manual/en/function.addslashes .php

Andere Tipps

Dies sollte ein Schritt in der richtigen Richtung:

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

Sind Sie sicher? Ist es nicht an:

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

Um den doppelten "Versuch zu verhindern:

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

oder

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

Es ist auch erwähnenswert, dass Sie eine PHP-Datei als JavaScript-Datei verwenden können,

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

Und Sie sind in der Lage PHP-Code in der Datei, sowie Ausgabe von JavaScript-Code auszuführen, indem von PHP Echo.

Da Sie den Endwert in JavaScript verwenden, würde ich json_encode verwenden:

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

Und es wird korrekt ausgegeben:

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

Hinweis Ich habe nicht einen zusätzlichen Satz von Anführungszeichen um die json_encode Funktion setzen. Es wird die erforderlichen Anführungszeichen hinzufügen, um einen gültigen JavaScript-String automatisch zu machen.

Frank Farmer Antwort ist interessant, aber es ist ein paar Dinge zu entkommen, die nicht brauchen maskiert werden, wie Registerkarten.

Versuchen Sie, diese Schnipsel, es funktioniert gut:

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

Da ich immer auf eine Datenbank in meinem PHP-Skripte verbunden bin, der Text direkt in Javascript-Strings übergeben, lehne ich mich auf real_escape_string meine schmutzige Arbeit zu tun. addslashes () verarbeitet nicht Zeilenumbrüche und diejenigen, schleichen manchmal in Strings auf mich vorbei zu Javascript.

Eine einfache $sql->real_escape_string($string) macht es besser, zu entkommen, was die Datenbank spuckt in eine Javascript-freundliche Form.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top