HTML-Entities in text-Feld

HTML-Entities in text-Feld

am 06.06.2007 19:43:31 von Ralph Stahl

Moin,

auf dem Webserver beim Provider habe ich mysql 4.1.5/php 5.2.1 und habe
seit kurzem einen merkwürdigen Effekt:

Mit PHP schreibe ich etwa

$name_int = 'Müller & Söhne';
$sql = "update groupkey set name_int = '$name_int'";

echo $sql;
// Zur Kontrolle: update groupkey set name_int = 'Müller & Söhne'

// mysql_query() ...

Wenn ich mir das Ergebnis hinterher mit phpMyAdmin (jaja, ich weiß
schon...) oder mysqldumper angucke (eine Shell habe ich dort leider
nicht), steht definitiv & statt & drin. Die Umlaute kommen richtig,
weil alles mit UTF8 gemacht ist (einschließlich der Anbindung über PHP).

Ist das nun ein Problem von mySQL oder PHP? Bei der Suche bin ich auf
magic_quotes gestoßen, kann aber nicht wirklich viel damit anfangen. So
sagt es phpinfo():

magic_quotes_gpc On
magic_quotes_runtime Off

Ich weiß, daß der Provider gern mal am Server rumschraubt, daher traue
ic im auch so eine ungewollte Fehleinstellung zu. Denn bis vor kurzem
ging noch alles ordentlich.

Gebt mir doch bitte mal nen Tip, wonach ich suchen muß.
Ralph

Re: HTML-Entities in text-Feld

am 06.06.2007 21:24:11 von Christian Kirsch

Ralph Stahl schrieb:
> Moin,
>
> auf dem Webserver beim Provider habe ich mysql 4.1.5/php 5.2.1 und habe
> seit kurzem einen merkwürdigen Effekt:
>
> Mit PHP schreibe ich etwa
>
> $name_int = 'Müller & Söhne';
> $sql = "update groupkey set name_int = '$name_int'";
>
> echo $sql;
> // Zur Kontrolle: update groupkey set name_int = 'Müller & Söhne'
>
> // mysql_query() ...
>
> Wenn ich mir das Ergebnis hinterher mit phpMyAdmin (jaja, ich weiß
> schon...) oder mysqldumper angucke (eine Shell habe ich dort leider
> nicht), steht definitiv & statt & drin. Die Umlaute kommen richtig,
> weil alles mit UTF8 gemacht ist (einschließlich der Anbindung über PHP).
>

Der Zusammenhang zwischen "Umlaute kommen richtig" und "UTF8" ist etwa
so zwingend wie der zwischen Massenvernichtungswaffen und dem Irakkrieg ;-)

> Ist das nun ein Problem von mySQL oder PHP? Bei der Suche bin ich auf
> magic_quotes gestoßen, kann aber nicht wirklich viel damit anfangen. So
> sagt es phpinfo():
>
Nein, das & ist sicherlich kein "MySQL-Problem", denn MySQL hat
keine Ahnung von HTML (glücklicherweise). Du darfst davon ausgehen, dass
der Browser oder die PHP-Anwendung aus dem "&" vorsichtshalber ein &
macht. Ich habe keine Ahnung von PHP, aber ich kenne ähnliche Phänomene
von Perl - das verhaut unter Umständen einen ganzen Latin-1-kodierten
String, wenn es darin irgendwo ein "komisches" Zeichen sieht.

PHP ist hier OT, folglich auch magic_quotes und ähnlich mystisches. Aber
das Phänomen ist sicherlich irgendwo in der PHP-Dokumentation beschrieben.

> magic_quotes_gpc On
> magic_quotes_runtime Off
>
> Ich weiß, daß der Provider gern mal am Server rumschraubt, daher traue
> ic im auch so eine ungewollte Fehleinstellung zu. Denn bis vor kurzem
> ging noch alles ordentlich.

Sicher? & ist ja nicht unbedingt ein häufiges Zeichen. Ich könnte mir
vorstellen, dass &, < und > schon länger als &, < und > in die
DB geschrieben wurden.

Re: HTML-Entities in text-Feld

am 07.06.2007 11:00:07 von Bernd Muent

* Ralph Stahl wrote:

> Wenn ich mir das Ergebnis hinterher mit phpMyAdmin (jaja, ich weiß
> schon...) oder mysqldumper angucke (eine Shell habe ich dort leider
> nicht), steht definitiv & statt & drin. Die Umlaute kommen richtig,
> weil alles mit UTF8 gemacht ist (einschließlich der Anbindung über PHP).
>
> Ist das nun ein Problem von mySQL oder PHP? Bei der Suche bin ich auf
> magic_quotes gestoßen, kann aber nicht wirklich viel damit anfangen. So
> sagt es phpinfo():

Ich würde sagen, daß dein PHPMyAdmin da irgendwas falsch für die
Browser-Ausgabe vorbereitet.

Du kannst doch auch einfach ein "SELECT " mit "WHERE feldname LIKE
'%&%'" starten und sehen, ob wirklich "&" in der Datenbank
gelandet ist oder nur angezeigt wird.

B.


--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt@bmservices.de

Re: HTML-Entities in text-Feld

am 08.06.2007 16:06:03 von Ralph Stahl

Bernd Muent schrieb:
> * Ralph Stahl wrote:
>
>> Wenn ich mir das Ergebnis hinterher mit phpMyAdmin (jaja, ich weiß
>> schon...) oder mysqldumper angucke (eine Shell habe ich dort leider
>> nicht), steht definitiv & statt & drin. Die Umlaute kommen
>> richtig, weil alles mit UTF8 gemacht ist (einschließlich der Anbindung
>> über PHP).
>>
>> Ist das nun ein Problem von mySQL oder PHP? Bei der Suche bin ich auf
>> magic_quotes gestoßen, kann aber nicht wirklich viel damit anfangen.
>> So sagt es phpinfo():
>
> Ich würde sagen, daß dein PHPMyAdmin da irgendwas falsch für die
> Browser-Ausgabe vorbereitet.
>
> Du kannst doch auch einfach ein "SELECT " mit "WHERE feldname LIKE
> '%&%'" starten und sehen, ob wirklich "&" in der Datenbank
> gelandet ist oder nur angezeigt wird.

Genau das war's! Alle Web-Basierten Tools haben natürlich & aus &
gemacht, ein "Auswahl-Quelltext anzeigen" hat's dann zutage gefördert.



Die off-topic-Erlärung:

Es wäre auch gar nicht so schlimm gewesen, wenn ich den DB-Inhalt nur
hätte anzeigen wollen. Aber ich habe aus einer Tabelle mit PHP ein Array
gemacht und das dann per Javascript (Ajax) in eine bestehende Selectbox
geschrieben - und dabei ist der HTML-Parser des Browsers nicht (mehr) im
Spiel, weil die Seite ja schon fertig ist. Also bleibt das &
sichtbar. Also mache ich nun vorher mit allen Array-Elementen ein
html_entities_decode() und fertig ist.



Also hat es natürlich nichts mit mySQL zu tun, nur mit meiner
Verzweiflung und der Notwendigkeit, Browsertools für die DB zu nutzen.

Danke trotzdem für Eure hilfreiche Mitarbeit!
Ralph