Php schreibt einfache Anführungszeichen um

Nord-Süd-Richtung

Erfahrenes Mitglied
Hi

ich habe ein Problem mit folgendem Code-Schnipsel:
PHP:
<?php
$menu_bgr = "background-image:url('../styles/images/backgrounds/menu.png');";
?>
<div style="margin-left:5px;margin-top:1px;height:122px;width:300px;float:left;border:1px solid #000;<? if($isbuilding != false && $isbuilding->type == $k ) echo $menu_bgr;?>">
HTML:
<!-- Quelltext im Browser: -->
<div style="margin-left: 5px; margin-top: 1px; height: 122px; width: 300px; float: left; border: 1px solid rgb(0, 0, 0); background-image: url(&quot;../styles/images/backgrounds/menu.png&quot;);">
Wie man sieht werden nicht die einfachen Anführungszeichen gesetzt, sondern ersetzt.
 
Du wirst irgendwo eine Funktion haben, die ' in &quot; wandelt. Mit PHP selbst würden - wenn überhaupt - einfache Anführungszeichen in & #039 ;gewandelt werden.
 
Zuletzt bearbeitet:
Hier wird garnix ersetzt;) Höchsten escaped.

PHP:
<?php
$menu_bgr = "\"background-image:url('../styles/images/backgrounds/menu.png');\"";
?>
<div style="margin-left:5px;margin-top:1px;height:122px;width:300px;float:left;border:1px solid #000;<? if($isbuilding != false && $isbuilding->type == $k ) echo $menu_bgr;?>">

Sobald PHP das erste " erreicht hat weis es, aha!, ein Sting...und beginnt erst ab dort mitm "lesen" an. "lesen" tut PHP solange, bist wieder, ein zweites " kommt. Da weis es, aha!, Sting ist zu ende.

Deswegen musst du wenn du in einem Sting Hochkommas verwenden möchtest diese vorher "escapen". Also ein Backshlash \ vor.

Fertig;)

MfG
 
Hier wird garnix ersetzt;) Höchsten escaped.

PHP:
<?php
$menu_bgr = "\"background-image:url('../styles/images/backgrounds/menu.png');\"";
?>
<div style="margin-left:5px;margin-top:1px;height:122px;width:300px;float:left;border:1px solid #000;<? if($isbuilding != false && $isbuilding->type == $k ) echo $menu_bgr;?>">

Sobald PHP das erste " erreicht hat weis es, aha!, ein Sting...und beginnt erst ab dort mitm "lesen" an. "lesen" tut PHP solange, bist wieder, ein zweites " kommt. Da weis es, aha!, Sting ist zu ende.

Deswegen musst du wenn du in einem Sting Hochkommas verwenden möchtest diese vorher "escapen". Also ein Backshlash \ vor.

Fertig;)

MfG
Natürlich wird dort ersetzt. Nämlich ein ' in &quot; - das hat überhaupt nichts mit escapen zu tun. Escapen wäre, wie du schon geschrieben hast z. B. \" - mehr nicht.

Dein Code würde ergeben:
Code:
<div style="margin-left:5px;margin-top:1px;height:122px;width:300px;float:left;border:1px solid #000; "background-image:url('../styles/images/backgrounds/menu.png');"">

Was haben die Anführungszeichen da verloren?

Es liegt nicht am fehlenden Escapezeichen, weil es dort nichts zu escapen gibt.
 
Zuletzt bearbeitet:
Ich hatte auch einmal 100% das gleiche Problem. Bei dem ich mit Sicherheit sagen konnte das nirgends replace Funktionen oder ähnliches vorhanden war. Damals hatte ein update der PHP Version zur Lösung des Problems geführt. Und als Hotfix wurde ein html_entity_decode um die Stringzuweisungen geschrieben. Einen tieferen Sinn wiso und weshalb konnte ich nicht erkennen. Ich vermutete ja stark das es mit den magic quotes zusammenhing oder einem anderen automatischen Sicherheitsmodul.
 
Hm, hab nicht gründlich genug gelsesen, dann eben nicht die doppelten Hochkommas " escapen, sondern vllt mal die einfachen Hockkommas mit einem \ escapen. vllt wird dann das ' normal belassen.

Eine Alernative wäre folgende:

PHP:
<?php
$menu_bgr = "../styles/images/backgrounds/menu.png";
?>
<div style="margin-left:5px;margin-top:1px;height:122px;width:300px;float:left;border:1px solid #000; background-image:url(' <? if($isbuilding != false && $isbuilding->type == $k ) echo $menu_bgr; ?> ');">
 
Hi

get_magic_quotes_gpc liefert int(1). Auch mit html_enity_decode erhalte ich das gleiche Ergebnis (sowohl bei der Variablenzuweisung als auch beim echo). Wenn ich den String mit var_dump ausgebe, erhalte ich den String so wie er sein sollte, das Problem scheint also beim output liegen. Vielleicht ist es noch wichtig zu sagen, dass das PHP-Script per Ajax aufgerufen wird.
@Marschal: Die Alternative finde ich in so fern unschön, da sich das Script in einer Schleife befindet und nicht immer ein Hintergrundbild gebraucht wird ;)
 
Moin,

<!-- Quelltext im Browser: -->

Vertraue nicht zu sehr auf das, was dir der Browser als Quelltext anzeigt....dort wird gerne mal etwas dazuinterpretiert.

Um sicher zu gehen, frage die Adresse lieber direkt mit einem Editor ab(falls du einen hast, der dies kann).

Ich bezweifle stark, dass PHP von sich aus ungefragt irgendetwas zu HTMLEntities umwandelt....ist mir jedenfalls noch nicht untergekommen.
 
Zurück