wahsaga: Eurozeichen automatisch codieren?

Beitrag lesen

hi,

Ich habe mit PHP & einer Mysql Datenbank ein kleines CMS Tool erstellt und wandle beim Speichern von Eingaben diverse Zeichen in den passenden HTML Code (mit str_replace)um.

Unsinnig.
Wandle die Daten bei der Ausgabe um.
Speichere Rohdaten. Wenn du die Rohdaten irgendwann noch mal brauchst/bearbeiten willst, hast du sie gleich zur Verfügung, ohne sie nochmal umständlich konvertieren zu müssen.

Also z.B. die Eingabe "Dies & Das" wird zu & quot;Dies & amp; Das& quot; (ohne Leerzeichen natürlich) - was auch problemlos funktioniert

Probleme gibts wie in der Überschrift bereits angerissen mit dem Eurozeichen. Es steht zwar eine ähnliche Angabe wie beim und-Zeichen also suche nach € und ersetze es mit & euro; - Nur hat das irgendwie keine Wirkung.

Woran könnte das liegen?

Daran, dass das Eurozeichen gar keins ist.

Wenn du iso-8859-1 als Zeichenkodierung verwendest, ist darin das € nicht enthalten.
Schickt dir ein Browser also Formulardaten, die ein € enthalten, in iso-8859-1 kodiert - dann bekommst du irgendwas, was in dieser Kodierung entweder gar keinen Sinn ergibt, oder auf jeden Fall nicht das €-Zeichen ist.

Nutze eine Kodierung, die die von dir verwendete Zeichenmenge abdeckt - dann kannst du dir die Umwandlung in HTML-Entities sparen, sowohl für Umlaute als auch für's €-Zeichen (die Notwendigkeit, HTML-eigene Zeichen zu maskieren, bleibt natürlich bestehen - das erledigt htmlspecialchars).

iso-8859-15 enthielte bspw. die deutschen Umlaute und das €-Zeichen.

Mit "fremdländischen" Zeichen kannst du dann aber immer noch Probleme bekommen, oder auch mit den „richtigen” deutschen Anführungszeichen.

Da hilft die Verwendung von UTF-8 weiter - was praktisch _alles_ abbilden kann.
Der Umgang mit UTF-8 in PHP und MySQL erfordert allerdings etwas Sorgfalt und vorherige Information - aber vernünftige Gründe, heutzutage nicht UTF-8 für Seiten, auf denen Nutzereingaben angezeigt werden, zu verwenden, sind m.E. äußerst rar geworden.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }