• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

HTML Entities: '&' wird als 'ℑ' interpretiert

petz_e

New member
Hallo,

Ich bastele ein sehr einfaches CMS. Der User gibt seine Posts in dieser Form in Textfelder ein:
PHP:
Hier ist mein <b>neuer</b> Bericht. [<a href="file.pdf">link</a>]
(Mitsamt HTML tags also). So werden die Textfelder in die Tabelle eingefügt.
PHP:
INSERT INTO news VALUES (NULL, '" . htmlentities($_POST["title"]) . "', " . strtotime($_POST['date']) . ", '" . htmlentities($_POST["message"]) . "')
Beim herauslesen und anzeigen auf der Webpage wird werden wieder die HTML tags umgewandelt.
PHP:
echo html_entity_decode($row["message"]);
Das klappt so, allerdings wird wenn ich die Nachricht bearbeite alle '&' in 'ℑ' umgewandelt. Wieso? In der Tabelle steht nach wie vor aber noch das '&' Wieso wird das jetzt als 'ℑ' interpretiert?

(Desweiteren wird das was hinter dem '&' im Link stand einfach weggeschnitten. &image=3 wird zu ℑ=3)

Patrick
 
Ich wollte eigendlich nur sichergehen dass alle quotes entfernt werden. Ich versuche es dann mal mit der anderen Funktion. Die scheint mir ja das selbe zu machen.

UPDATE: Ich habe jetzt die mysql_real_escape_string Funktion benutzt. Ist viel weniger Aufwand. Das Problem mit dem 'ℑ' besteht nach wie vor. In der Datenbank steht '&image=2340', beim Herauslesen wird das jedoch nur als 'ℑ=2340' interpretiert.

PHP:
$result = mysql_query("SELECT * FROM news WHERE id = " . $_GET["id"]);
							$row = mysql_fetch_assoc($result);
							if (mysql_num_rows($result) > 0) {
								$id = $row["id"];
								$title = $row["title"];
								$date = date("m/d/Y",$row["date"]);
								$message = $row["message"];

...

<textarea id="message" name="message" cols="60" rows="10"><?php echo $message; ?></textarea>

Patrick
 
Zuletzt bearbeitet:
Dann wird irgendwo deine Kodierung geändert. Wobei das ein wirklich seltsames Zeichen ist und das '&' eigentlich in allen Kodierungen identisch sein sollte. Ohne eine genau Analyse der Seite läßt sich dir kaum helfen.
 
Ich hab jetzt noch ein paar Tests gemacht. Das Problem tritt nur bei dieser einen Zeichenkette auf: "&image"!
Bei "&", "&test", "&images", "&imag", ... wird das & jeweils korrekt angezeigt. Bei "&image" wird nur das komische Zeichen angezeigt, 'image' wird komplett weggelassen. Ich kappier das überhaupt nicht, in der mySQL Datenbank steht es jetzt korrekt. Und so lese ich aus:
PHP:
$result = mysql_query("SELECT * FROM news WHERE id = 12"]);
$row = mysql_fetch_assoc($result);
if (mysql_num_rows($result) > 0) {
	$message = $row["message"];
	echo "-> $message";   /* steht hier schon falsch */
}

Patrick
 
OK, wie dumm. Hab's jetzt gefunden.

Post von Leuten mit einem ähnlichen Problem:
"with any embedded code it´s not possible to use the image tag because the browsers firefox and chrome change the &image to some ℑ char."
"Use "image" as the first parameter, this way you avoid the character sequence "&image", which is an HTML escape code for the ℑ character."

Patrick
 
Das ist genau das, was ich mit Kontext meinte.
Im HTML Kontext musst du natürlich mit htmlentities() arbeiten, damit genau sowas nicht passiert.
 
Zurück
Oben