SEO Welten
Buchempfehlungen
|
htmlspecialchars und htmlentities mit double_encodeBeispiele: double_encode richtig verwendenBeim Programmieren einer Anwendung sollte niemals die Sicherheit eines Scripts
außer acht gelassen werden, soviel ist gewiss. Sicherheit ist wichtig, auch wenn es keinen hundertprozentigen
Schutz vor unlauteren Zeitgenossen gibt. PHP verfügt über einige Funktionen, die, richtig angewendet, einen
gewissen Schutz bieten. Neben der Funktion strip_tags() werden am häufigsten die Funktionen htmlspecialchars()
und htmlentities() verwendet, um ein Mindestmaß an Sicherheit bei der Ausgabe zu erreichen. Mit der Funktion
htmlspecialchars() werden einige Sonderzeichen entschärft und statt den Sonderzeichen ihre unschädlichen
HTML-Codes ausgegeben, mit der htmlentities() alle Sonderzeichen umgewandelt, für die es einen entsprechenden
Code in HTML gibt. $einString = "'Honig' & süße \"Schokolade\"";
Mit der Version PHP 5.2.3 wurde von den Machern von PHP für die Funktionen
htmlspecialchars() und htmlentities() der zusätzliche Parameter double_encode eingeführt, der dieses Problem
behebt. Doch bei der Suche nach Beispielen stößt ein unerfahrener Einsteiger zuweilen auf kuriose Gebilde,
jedoch kaum auf funktionierende Code-Schnipsel. Dabei ist die Anwendung dieses zusätzlichen Parameters eigentlich
recht simpel, wenn die Reihenfolge der Parameter vom Programmierer beachtet wird. string htmlentities ( string $string [, int $quote_style = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] ) Quelle: http://php.net/manual/de/function.htmlentities.php Reihenfolge: htmlentities(der String, ein Integerwert, ein String für Charset,
einen boolean Wahrheitswert) $einString = "Ich 'bin' nur \"ein\" Teststring"; echo htmlentities($einString, 0)."<br>\n"; echo htmlentities($einString, 2)."<br>\n"; echo htmlentities($einString, 3)."<br>\n"; /* Ich 'bin' nur "ein" Teststring<br> Ich 'bin' nur "ein" Teststring<br> Ich 'bin' nur "ein" Teststring<br> Ergebnis des Tests (Nicht verbindlich, da nur ein Test!): 0 entspricht ENT_NOQUOTES 2 entspricht ENT_COMPAT 3 entspricht ENT_QUOTES */ Bleiben wir bei der eigentlich Schreibweise und betrachten uns den nächsten
Parameter und dessen Werte. Gefragt ist ein String, der den Charset bezeichnet. Da die gebräuchlichsten
Charsets wie UTF-8 und ISO-8859-1 bereits zu der Grundausstattung beider Funktionen gehören, könnte dieser
String eigentlich entfallen. Im Normalfall wird dieser Parameter auch kaum verwendet. Ein Problem entsteht
erst dann, wenn der neu hinzu gekommene Parameter double_encode verwendet werden soll, um bereits vorhandene
HTML-Entities nicht doppelt zu kodieren. PHP erwartet an dritter Stelle in der Reihenfolge einen String
und erst an vierter Stelle einen boolean Wahrheitswert. Und diese Reihenfolge muss eingehalten werden, da
alles andere kaum zum Erfolg führen würde. $einString = "'Honig' & süße \"Schokolade\""; echo htmlspecialchars($einString, ENT_QUOTES, "UTF-8", false)."<br>\n"; echo htmlspecialchars($einString, ENT_QUOTES, "UTF-8", Null)."<br>\n"; echo htmlspecialchars($einString, ENT_QUOTES, "ISO-8859-1", 0)."<br>\n"; /* Ausgabe im Quelltext: 'Honig' & süße "Schokolade"<br> 'Honig' & süße "Schokolade"<br> 'Honig' & süße "Schokolade"<br> Ausgabe Monitor: 'Honig' & süße "Schokolade" 'Honig' & süße "Schokolade" 'Honig' & süße "Schokolade" */ Anmerkung: Die 0 ist eigentlich kein boolescher Wert, da der boolean Datentyp nur für True und False (wahr und unwahr) ausgelegt ist. Dennoch wird die 0 als false gewertet, wenn kein Typenvergleich durchgeführt wird. |
Navigation
Finden und - Optimierung - Zukunftsaussichten
Webcoding
Übersicht Web Services
Tutorials & XML RegEx und vieles mehr... |