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; }