Der Martin: Sonderzeichen richtig speichern

Beitrag lesen

Hallo,

laut ASCII-Tabelle wird das Zeichen & als %26 richtig interpretiert.

nö, %26 ist die Repräsentation des Zeichens & im URL-Kontext.

Wenn also ein User das &-Zeichen in meinem Formular manuell eingibt, wandel ich dieses in %26 um.

Warum? Das macht doch schon der Browser des Formularausfüllers. Und in deinem Script kommt das Zeichen wieder sauber im Klartext an, weil der Server die Codierung ordnungsgemäß rückgängig macht.

Das erlaubt mir dann auch diese Variable an andere Scripte zu übergeben.

Wie? Wozu? Warum die URL-Codierung an einer Stelle, für die sie gar nicht gedacht ist?

Letztendlich soll die Eingabe in einer MySql-Datenbank gespeichert werden.

Das ist wieder eine andere Geschichte; bei der Übergabe an die DB sind deren Regeln zu beachten. Stringwerte werden z.B. mit mysql_real_escape_string() maskiert (ich gehe einfach mal von mySQL aus).

Dort wird natürlich nun das Zeichen %26 gespeichert

Die drei Zeichen '%', '2' und '6', um genau zu sein. Klar, wenn du sie so im String hast.

Ich dachte mit [...$variable=htmlspecialchars($variable);...] wird das ganze richtig abgespeichert. Ist aber nicht so.

Raten ist keine gute Strategie. Daten müssen immer dann maskiert oder codiert werden, wenn sie in einen anderen Kontext gebracht werden, und zwar entsprechend den Regeln dieses Kontextes - nicht "auf Verdacht" nach irgendeiner Vorschrift, die zufällig etwas Ähnliches leistet.

Was muss ich also mit meiner Variable machen, bevor ich Sie in meiner Datenbank speicherer?

Nichts. Außer der notwendigen Maskierung mit mysql_real_escape_string().

So long,
 Martin

--
Disziplin: Teppichböden wiederfinden, wenn man sie verlegt hat.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(