401 Stimmen

Übergeben Sie eine PHP-Variable an eine JavaScript-Variable

Was ist der einfachste Weg, um einen PHP-String für die Ausgabe in einer JavaScript-Variablen zu codieren?

Ich habe einen PHP-String, der Anführungszeichen und Zeilenumbrüche enthält. Ich muss den Inhalt dieses Strings in eine JavaScript-Variablen einfügen.

Normalerweise würde ich einfach mein JavaScript in einer PHP-Datei erstellen, wie folgt:

  var myvar = "<?php echo $myVarValue;?>";

Dies funktioniert jedoch nicht, wenn $myVarValue Anführungszeichen oder Zeilenumbrüche enthält.

2 Stimmen

Wollte nur darauf hinweisen, dass Sie utf8_encode() verwenden können, bevor Sie den String an json_encode übergeben. Das mache ich: echo json_encode(utf8_encode($msg));

1 Stimmen

Dies ist kein Duplikat von stackoverflow.com/questions/23740548/…. Der letztere spricht über AJAX usw. und Netzwerkfragen, während es hier um Encoding/Escaping/Anführungszeichen und Zeilenumbrüche geht. Können wir das wieder öffnen? (Übrigens ist hier die angenommene Antwort kurz, funktioniert gut und hat viele Hunderte von Stimmen)

2voto

Jacob Punkte 9904

Sie könnten es versuchen

    myvar = unescape('<?=rawurlencode($myvar)?>');

0 Stimmen

Funktioniert nicht vollständig. Versuchen Sie es mit diesem String::: Ich frage mich "hey jude", weil 1 + 1 < 5 ::: wir erhalten immer noch <, also keine hundertprozentige bidirektionale Transliteration.

0 Stimmen

unescape ist jetzt veraltet. Verwenden Sie stattdessen decodeURIComponent.

0voto

Chris MacDonald Punkte 5827

Htmlspecialchars

Beschreibung

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

Bestimmte Zeichen haben in HTML eine besondere Bedeutung und sollten durch HTML-Entitäten dargestellt werden, wenn sie ihre Bedeutung behalten sollen. Diese Funktion gibt einen String zurück, bei dem einige dieser Umwandlungen vorgenommen wurden; die vorgenommenen Übersetzungen sind diejenigen, die am nützlichsten für die tägliche Webprogrammierung sind. Wenn alle HTML-Zeichenentitäten übersetzt werden sollen, verwenden Sie stattdessen htmlentities().

Diese Funktion ist nützlich, um zu verhindern, dass vom Benutzer bereitgestellter Text HTML-Markup enthält, z.B. in einer Nachrichten-Board- oder Gästebuchanwendung.

Die durchgeführten Übersetzungen sind:

* '&' (Ampersand) wird zu '&amp;'
* '"' (doppelte Anführungszeichen) wird zu '"', wenn ENT_NOQUOTES nicht gesetzt ist.
* ''' (einfaches Anführungszeichen) wird zu ''' nur wenn ENT_QUOTES gesetzt ist.
* '<' (kleiner als) wird zu '<'
* '>' (größer als) wird zu '>'

http://ca.php.net/htmlspecialchars

3 Stimmen

Dies ist nur die richtige Lösung, wenn der Inhalt der JS-Variablen tatsächlich HTML sein soll, wo ein Zeichenfolgentoken wie & Bedeutung hat. Andernfalls ist es vielleicht am besten, sie nicht in Entitäten umzuwandeln.

-1voto

ioTus Punkte 667

Ich bin mir nicht sicher, ob dies schlechte Praxis ist oder nicht, aber mein Team und ich verwenden eine gemischte HTML-, JS- und PHP-Lösung. Wir beginnen mit dem PHP-String, den wir in eine JS-Variable ziehen möchten, nennen wir ihn:

$someString

Als nächstes verwenden wir versteckte Formularelemente auf der Seite und setzen ihren Wert als den String:

Dann ist es ein einfaches Vorgehen, eine JS-Variable über document.getElementById zu definieren:

    var moonUnitAlpha = document.getElementById('phpString1').value;

Jetzt können Sie die JS-Variable "moonUnitAlpha" überall dort verwenden, wo Sie diesen PHP-String-Wert abrufen möchten. Das scheint für uns sehr gut zu funktionieren. Wir werden sehen, ob es bei intensiver Nutzung standhält.

1 Stimmen

Ich habe das in meinen früheren Projekten gemacht. Nächstes Mal werde ich versuchen, jQuery-Daten zu verwenden.

2 Stimmen

Denken Sie daran, Ihren $someString zu htmlencoden ... und obwohl dies für Eingaben @value in Ordnung ist, müssen Sie bei Attributen vom Typ href/src/onclick besonders vorsichtig sein (versuchen Sie, eine White-Liste zu erstellen), da sie direkt den javascript: Protokoll verwenden können, das nicht gegen html-codierte Werte geschützt ist.

0 Stimmen

Um sicher zu sein, sollten Sie wirklich value="" machen.

-3voto

Adam Punkte 25228

Wenn Sie eine Template-Engine verwenden, um Ihr HTML zu erstellen, können Sie es mit allem füllen, was Sie wollen!

Schauen Sie sich XTemplates an. Es ist eine schöne, Open-Source, leichte Template-Engine.

Ihr HTML/JS würde dort so aussehen:

    var myvar = {$MyVarValue};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X