Michael: / HTML - Sonderzeichen aus Formular

Hallo!

Ich habe bei der Entwicklung einer Seite auf PHP-Basis einige Schwierigkeiten:
Ich habe auf meiner Seite ein Eingabeformular, dessen Inhalt nach der Übermittlung in einer Datenbank gespeichert werden soll. Da ich auf eine alte Version von MySQL angewiesen bin, fällt UTF-8 als Zeichensatz leider aus, daher verwende ich ISO-8859-1. Die Seite und das Formluar sind klar als ISO-8859-1 gekennzeichnet:

header("Content-Type: text/html; charset=iso-8859-1")
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
<form action="index.php" method="post" accept-charset="ISO-8859-1">

Wenn ich nun in das Eingabefeld Sonderzeichen, wie beispielsweise Chinesische Schriftzeichen, eingebe, so werden diese codiert an das Script übermittelt (Bsp.: &#8364;).

Wenn ich die Daten nun aus der Datenbank auslese und ausgeben möchte, so wende ich vorher htmlentities an, um Zeichen wie <, &, > etc. zu codieren. Dabei tritt natürlich das Problem auf, dass aus &#8364; ganz schnell mal &amp;#8364; wird.

Leider fehlt mir die Idee, wie ich diesem Problem aus dem Weg gehen kann, außer komplett auf Unicode umzusteigen, was wie gesagt leider nicht möglich ist.

Über Hilfe würde ich mich sehr freuen!

Mit freundlichen Grüßen,
Michael

  1. echo $begrüßung;

    Da ich auf eine alte Version von MySQL angewiesen bin, fällt UTF-8 als Zeichensatz leider aus, daher verwende ich ISO-8859-1.

    Das muss nicht in jedem Fall so sein. Wenn du die Datenbank als reine Ablage verwendest und keine Stringverarbeitung mit ihr machst (z.B. Suchen in String-Feldern), dann stellt es kein Problem dar, beliebige Bytefolgen (wie UTF8-kodierte Texte) in ihr abzulegen.

    Ansonsten fällt mir keine gescheite Lösung ein.

    Wenn ich nun in das Eingabefeld Sonderzeichen, wie beispielsweise Chinesische Schriftzeichen, eingebe, so werden diese codiert an das Script übermittelt (Bsp.: &#8364;).

    (€ ist doch kein chinesisches Schriftzeichen ...)

    So wie es momentan läuft kannst du ja nicht unterscheiden, ob so ein Entity vom Benutzer eingegeben wurde oder eine vom Browser vorgenommene Ersatzdarstellung ist.
    Steigst du um auf UTF-8, umgehst du zwar diese Uneindeutigkeit im Browser, hast aber möglicherweise das Stringverarbeitungsproblem, weil die Datenbank weder die UTF-8-Kodierung richtig auswerten kann noch irgend eine andere Ersatzschreibweise.

    echo "$verabschiedung $name";

    1. Hallo,

      Das muss nicht in jedem Fall so sein. Wenn du die Datenbank als reine Ablage verwendest und keine Stringverarbeitung mit ihr machst (z.B. Suchen in String-Feldern), dann stellt es kein Problem dar, beliebige Bytefolgen (wie UTF8-kodierte Texte) in ihr abzulegen.

      Leider bin ich auf Such- und Sortierfunktionen angewiesen.

      (€ ist doch kein chinesisches Schriftzeichen ...)

      Pardon, ich meinte &#36895;... Bei € ist es allerdings das selbe Problem, da meine MySQL-Version auch kein ISO-8859-15 unterstützt.

      So wie es momentan läuft kannst du ja nicht unterscheiden, ob so ein Entity vom Benutzer eingegeben wurde oder eine vom Browser vorgenommene Ersatzdarstellung ist.

      Genau da liegt mein Problem, sonst könnte ich sie einfach aus der Eingabe herausfiltern.

      Danke für deine Erklärungen. Es scheint als müsste ich mich mit dem Problem abfinden. Eventuell werde ich einfach zwischen htmlentities und der Ausgabe ein preg_replace('/&amp;#([0-9]*)/', '&#$1', $string) einschieben. Das Posten von Entities dürfte auf meiner Seite relativ unwarscheinlich sein.

      Michael

      1. Das Posten von Entities dürfte auf meiner Seite relativ unwarscheinlich sein.

        Falls das Posten von Entities auf deiner Seite nciht auftritt, einfach nach dem Auslesen aus der Datenbank bei der Ausgabe eine Decoding-Funktion einbauen, die aus &amp; wieder & macht.

        Michael

        lg
        Thomas