Sven Rautenberg: Benannte Zeichen

Beitrag lesen

Moin!

Für die Codierung mit ISO 8859-1 sollte man schon htmlentities(...,ENT_QUOTES) benutzen.

Nein, das ist nicht notwendig. In keiner Konstellation.

Da der Datenaustausch zwischen Server und Browser sowie zwischen Browser und Server in der gleichen Codierung abläuft, sofern man nicht manuell eingreift, stehen die Strings in PHP in der passenden Codierung zur Verfügung. htmlentities() codiert Zeichen, die nicht codiert werden müssen - und benötigt obendrein für korrektes Arbeiten die Angabe, welche Zeichencodierung verwendet werden soll.

Ich kann Dir nicht folgen.

Wenn du Daten, die dir der Browser geschickt hat, wieder an diesen zurückschickst, kannst du nur Zeichen empfangen haben, die in der jeweiligen Codierung darstellbar waren.

Bei ISO-8859-1 kriegst du garantiert nur Zeichen zurück, die in ISO-8859-1 direkt darstellbar waren. Und auch wenn du externe Quellen einbindest, die in ISO-8859-1 codiert sind (Datenbanken, Textdateien, Streams von Webservices etc.), erhälst du ausschließlich Zeichen, die direkt in ISO-8859-1 darstellbar sind, also keinerlei Umwandlung in Entities erfordert. Denn würden Zeichen zu übermitteln sein, die in ISO-8859-1 nicht darstellbar wären, dann wären diese schon in irgendeiner Form passend codiert (das muß nicht als Entity sein, kann aber), so dass eine weitergehende Codierung in Entities einfach nur mit htmlentities() sowieso nicht funktionieren würde.

Wenn ich eine Seite in der Codierung ISO 8859-1 an den Browser ausliefere, wieso brauche ich dann keine Zeichen als HTML-Entitities (benannt oder als numerische Notation) zu senden?

Es mag ja sein, dass du Zeichen senden möchtest, die in ISO-8859-1 nicht darstellbar sind. Aber die kriegst du keinesfalls vom Browser als Inhalt von Formularfeldern zurück, und auch nicht aus anderen ISO-8859-1-codierten Quellen in einer htmlentities-fähigen Form.

Und wieso benötigt htmlentities() dann noch die Angabe der Zeichenkodierung? ISO-8859-1 ist default!

Richtig, aber es ist ja unnötig, es anzuwenden, Begründung siehe oben. Solltest du hingegen UTF-8-Quellen anzapfen, in denen ja Zeichen vorkommen können, die nicht in ISO-8859-1 passen, mußt du das selbstverständlich mitteilen - ansonsten kriegst du ä als Entitykombination für irgendeinen der deutschen Umlaute (ä, ö, ü - irgendeiner wird's sein), und nicht &xuml;.

Wieso hat man die benannten/numerierten Zeichen dann überhaupt eingeführt?

Weil in einigen Codierungen nicht die Gesamtpalette der in HTML möglichen Zeichen direkt codiert werden können.

Und wieso muss ich das einfache Häkchen nicht ersetzen?

Wenn im html-Code z.B. steht

<input type='text' name='eingabe' value='<?php echo $eingabe; ?>' >

was würde dann dabei herauskommen, wenn in $eingabe ein Häkchen vorkommt?

Das kannst du ja aber problemlos beeinflussen:

<input type="text" name="eingabe" value="<?php echo htmlspecialchars($eingabe); ?>">

- Sven Rautenberg

--
"Love your nation - respect the others."