Übergeben Sie eine PHP-Variable an eine JavaScript-Variable
Lesezeit: 6 Minuten
David Laig
Was ist der einfachste Weg, einen PHP-String für die Ausgabe in eine JavaScript-Variable zu codieren?
Ich habe eine PHP-Zeichenfolge, die Anführungszeichen und Zeilenumbrüche enthält. Ich brauche den Inhalt dieser Zeichenfolge, um in eine JavaScript-Variable eingefügt zu werden.
Normalerweise würde ich mein JavaScript einfach in einer PHP-Datei konstruieren, à la:
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
Dies funktioniert jedoch nicht, wenn $myVarValue enthält Anführungszeichen oder Zeilenumbrüche.
Ich wollte nur darauf hinweisen, dass Sie verwenden können utf8_encode() bevor Sie die Zeichenfolge an übergeben json_encode. Das ist was ich tue: echo json_encode(utf8_encode($msg));
– Carloswini
11. September 2013 um 18:00 Uhr
Das ist nicht ein Duplikat von stackoverflow.com/questions/23740548/…. Letzteres spricht über AJAX etc. und Netzwerkfragen, während es hier um Codierung/Escapezeichen/Anführungszeichen und Zeilenumbrüche geht. Lass uns wieder öffnen? (Übrigens, hier ist das Akzeptiert kurz, funktioniert gut und hat viele hundert Stimmen)
– Basj
1. Dezember 2021 um 12:19 Uhr
Bobwienholt
Erweiterung der Antwort eines anderen:
<script>
var myvar = <?= json_encode($myVarValue, JSON_UNESCAPED_UNICODE); ?>;
</script>
$myVarValue codiert als UTF-8 (oder natürlich US-ASCII)
Da UTF-8 Unicode vollständig unterstützt, sollte es sicher sein, es im laufenden Betrieb zu konvertieren.
Bitte beachten Sie, dass Sie, wenn Sie dies in HTML-Attributen wie onclick verwenden, das Ergebnis von json_encode wie folgt an htmlspecialchars() übergeben müssen:
sonst könnten Sie Probleme bekommen mit z.B. &bar; In foo()&&bar; als HTML-Entität interpretiert werden.
Wenn Sie UTF-8 verwenden, ist das bei weitem die beste Lösung.
– Körnel
13. Oktober 2008 um 23:02 Uhr
Es ist wichtig, dass die Implementierung von json_encode den Schrägstrich maskiert. Wenn dies nicht der Fall wäre, würde dies nicht funktionieren, wenn $myVarValue “” wäre. Aber json_encode entgeht Schrägstrichen, also sind wir gut.
Bitte beachten Sie, wenn Sie dies in verwenden onclick Attribute und dergleichen, müssen Sie das Ergebnis übergeben json_encode Zu htmlspecialcharswie folgt: htmlspecialchars(json_encode($string),ENT_QUOTES,'utf-8') sonst könnten Sie Probleme bekommen mit z.B. &bar; In foo()&&bar; als HTML-Entität interpretiert werden.
– Benutzer2428118
2. Juni 2014 um 14:09 Uhr
@hakre: Aber wie PHP-String enthält "...</script>..." kann JS Non-String werden </script> statt nur JS-String "...</script>..." nach json_encode von PHP? Es fügt immer Anführungszeichen für Zeichenfolgen hinzu. So, var x = "...</script>..."; ist nur ein JS-String. Keine Pause.
– Flammensturm
27. Juli 2017 um 14:21 Uhr
codiere es mit JSON
Wahrscheinlich der einfachste Weg, dies zu 100% zum Laufen zu bringen. Es gibt zu viele Fälle, um sie anderweitig abzudecken.
– willasaywhat
3. Oktober 2008 um 18:42 Uhr
Json funktioniert nur mit UTF-8 Charset. Es ist also keine Lösung, wenn Ihre Website in einer Nicht-UTF-8-Kodierung arbeitet
– Nein
27. April 2009 um 12:06 Uhr
@nir: Einerseits kenne ich keinen Grund, eine andere Codierung zu verwenden, andererseits verwaltet ein vollständiger JSON-Encoder auch die erforderliche Zeichensatzkonvertierung
– Javier
28. April 2009 um 2:03 Uhr
Es reicht nicht aus, es mit JSON zu codieren, Sie müssen auch sicherstellen, dass jede Javascript-Zeichenfolge, die enthält </script> (Groß-/Kleinschreibung wird nicht beachtet) richtig behandelt wird.
– Flimmer
13. November 2015 um 15:03 Uhr
Das Codieren eines einzelnen Skalarwerts mit JSON zwingt ihn nicht zu einem Objekt – Sie erhalten nur eine UTF-8-Zeichenfolge. Nehmen wir zum Beispiel an, Ihr PHP-Code sieht so aus: $x=”“; und Ihr HTML sieht so aus: das Ergebnis beim Durchsuchen ist: Beachten Sie die doppelten Anführungszeichen und den maskierten Schrägstrich.
Ich brauchte dieses, weil ich den Inhalt der Variablen als Teil eines verketteten Javascript-Ausdrucks verwendete.
– Phil Cairns
22. Februar 2018 um 20:27 Uhr
Das hat mir wirklich geholfen.
– Austin
17. Februar 2019 um 3:37 Uhr
Ich hatte ein ähnliches Problem und verstehe, dass die folgende Lösung die beste ist:
<script>
var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>
Allerdings ist die Verknüpfung dass micahwittman gepostet hat, deutet darauf hin, dass es einige geringfügige Codierungsunterschiede gibt. PHPs rawurlencode() Funktion entsprechen soll RFC-1738während es bei Javascript anscheinend keine solchen Bemühungen gegeben hat decodeURIComponent().
BEARBEITEN: Der Grund warum json_encode() möglicherweise nicht angemessen ist, dass Sie manchmal verhindern müssen " zu erzeugen, z
<div onclick="alert(???)" />
Jedem einzelnen Charakter zu entkommen, hat für mich funktioniert. json_encode verarbeitet Backslashes nicht sehr gut. Wenn Sie so etwas wie einen regulären Ausdruck von MySQL an Javascript als Parameter übergeben müssen, scheint dies der beste Weg zu sein.
– Ekim
22. Mai 2012 um 4:05 Uhr
@kristoffer-ryhl bemerkt richtig, dass dechex nicht für ‚\t‘ (= ‚\x08‘) funktioniert, also habe ich es bearbeitet, um sprintf zu verwenden. Dies scheint jedoch immer noch nicht für UTF-8-Zeichen zu funktionieren (dies würde stattdessen die Verwendung von '\u' erfordern) ...
– Giraffe
8. November 2015 um 12:47 Uhr
Für ein HTML-Attribut könnten Sie tun <div onclick="alert(<?php echo htmlspecialchars(json_encode($var));?>" />
<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>
oder
<script>
var myVar = <?= json_encode($myVarValue) ?>;
</script>
Jedem einzelnen Charakter zu entkommen, hat für mich funktioniert. json_encode verarbeitet Backslashes nicht sehr gut. Wenn Sie so etwas wie einen regulären Ausdruck von MySQL an Javascript als Parameter übergeben müssen, scheint dies der beste Weg zu sein.
– Ekim
22. Mai 2012 um 4:05 Uhr
@kristoffer-ryhl bemerkt richtig, dass dechex nicht für ‚\t‘ (= ‚\x08‘) funktioniert, also habe ich es bearbeitet, um sprintf zu verwenden. Dies scheint jedoch immer noch nicht für UTF-8-Zeichen zu funktionieren (dies würde stattdessen die Verwendung von '\u' erfordern) ...
– Giraffe
8. November 2015 um 12:47 Uhr
Für ein HTML-Attribut könnten Sie tun <div onclick="alert(<?php echo htmlspecialchars(json_encode($var));?>" />
Die Lösung von Micah unten funktionierte für mich, da die Site, die ich anpassen musste, nicht in UTF-8 war, sodass ich json nicht verwenden konnte. Ich würde dafür stimmen, aber mein Ruf ist nicht hoch genug.
Ich wollte nur darauf hinweisen, dass Sie verwenden können
utf8_encode()
bevor Sie die Zeichenfolge an übergebenjson_encode
. Das ist was ich tue:echo json_encode(utf8_encode($msg));
– Carloswini
11. September 2013 um 18:00 Uhr
Das ist nicht ein Duplikat von stackoverflow.com/questions/23740548/…. Letzteres spricht über AJAX etc. und Netzwerkfragen, während es hier um Codierung/Escapezeichen/Anführungszeichen und Zeilenumbrüche geht. Lass uns wieder öffnen? (Übrigens, hier ist das Akzeptiert kurz, funktioniert gut und hat viele hundert Stimmen)
– Basj
1. Dezember 2021 um 12:19 Uhr