Alex: Warum htmlspecialchars() den Zeichensatz mitgeben?

Hallo,

weiß jemand, für was man htmlspecialchars() den Zeichensatz mitgeben kann? Bei der Umwandlung sind doch nur ASCII-Zeichen betroffen.

Folgendes Beispiel gibt auch wie erwartet  "identisch!" aus:

<?php  
$original_string = '<b>"Hello World!" äöüß 互联网 انټرنټ अंतरजाल ອິນເຕີເນັດ ☀ ★</b>';  
$string_1 = htmlspecialchars($original_string);  
$string_2 = htmlspecialchars($original_string, ENT_COMPAT, 'utf-8');  
if($string_1 === $string_2) echo 'identisch!';  
?>

Alex

  1. Tach,

    weiß jemand, für was man htmlspecialchars() den Zeichensatz mitgeben kann? Bei der Umwandlung sind doch nur ASCII-Zeichen betroffen.

    für Zeichensätze, in denen die ASCII-Zeichen nicht in den ersten 7 Bit kodiert sind; nicht, dass mir ein solcher bekannt wäre.

    mfg
    Woodfighter

    1. Hallo Jens,

      für Zeichensätze, in denen die ASCII-Zeichen nicht in den ersten 7 Bit kodiert sind; [...]

      OK, das klingt einleuchtend!

      Alex

    2. Hallo,

      für Zeichensätze, in denen die ASCII-Zeichen nicht in den ersten 7 Bit kodiert sind; nicht, dass mir ein solcher bekannt wäre.

      UTF-32 z.B. speichert ja *jedes* Zeichen mit vier Byte. Da kann es theoretisch vorkommen, dass ein einzelnes Byte genau den selben Code wie etwa die öffnende spitze Klammer in ASCII hat, obwohl es nur ein Teil des Unicode eines anderen Zeichen ist.

      Gruß

    3. echo $begrüßung;

      für Zeichensätze, in denen die ASCII-Zeichen nicht in den ersten 7 Bit kodiert sind; nicht, dass mir ein solcher bekannt wäre.

      Andersrum wird auch ein Schuh draus: Die gemäß ASCII-kodierten Bytewerte der HTML-eigenen Zeichen können in Multibyte-Kodierungen in Kombination mit anderen Bytes eine andere Bedeutung haben. Für die ISO-8859-Familie und UTF-8 ist das nicht der Fall, aber mindestens eine der asiatischen Kodierungen betrifft das.

      echo "$verabschiedung $name";

  2. Hallo,

    Danke für Eure Antworten!

    Eine Zeichensatz-Angabe sollte also nicht notwendig sein, solange man bei UTF-8 bleibt.

    Alex