Rolf B: PHP: Hochkomma für MySQL/MariaDB maskieren?

Beitrag lesen

Hallo Yadgar, hallo Raketen.*,

bis PHP 8.0 ist der Defaultwert für den flags-Parameter von htmlspecialchars ENT_COMPAT, d.h. einfache Anführungszeichen werden nicht umgesetzt. Das ändert sich mit PHP 8.1, da wechselt der Default auf ENT_QUOTES|ENT_SUBSTITUTE, ein breaking change, der meines Erachtens etliche Webseiten abschießen könnte. Immerhin ist es hier aufgeschrieben.

Deswegen sollte man die Funktion definitiv nicht ohne Flags aufrufen, sondern

htmlspecialchars($data, ENT_QUOTES | ENT_HTML5)

verwenden. Dann entsteht aus dem Hochkomma ' und nicht das nichtssagende '. Man könnte auch noch das in PHP 8.1 hinzu kommende ENT_SUBSTITUTE hinzufügen.

Für Yadgar ist aber auch wichtig, dass die htmlspecialchars-Maskierung nicht vor dem Schreiben in die DB erfolgen darf. In die Datenbank gehört das ' (besser natürlich das typographisch richtige Zeichen ’, das aber nur ausgewählte Benutzer überhaupt eingeben können) und keine HTML-Codierung dieses Zeichens. Die HTML Codierung gehört ausschließlich vor die HTML Ausgabe und nirgendwo anders hin.

Und um Probleme mit der Schreibweise auszuschließen, muss man dafür sorgen, dass Interpunktion möglichst von Suchvorgängen ausgenommen wird. Ob der SOUNDS LIKE Operator dafür genügt, weiß ich nicht.

Rolf

--
sumpsi - posui - obstruxi