dedlfix: ist erledigt

Beitrag lesen

Hi!

ich weiss zwar nicht, warum der String verlorengegangen ist, aber mit
$arr_in['titel'] = htmlentities(utf8_encode($arr_in['titel']), ENT_QUOTES, 'UTF-8');
ist das Problem (scheinbar?) gelöst.

Nein. Zum einen ist es wenig sinnvoll, andere als die HTML-eigenen Zeichen als Entity/NCR zu schreiben. Ausnahmen sind zum Beispiel Whitespace-Zeichen, denen man nicht ansieht, dass sie eben kein einfaches Leerzeichen sind. Aber das braucht man eigentlich nur, wenn man die Zeichen zu Fuß notiert. In einer automatischen Verarbeitung bringen die Entitys/NCRs keine Vorteile gegenüber der Verwendung der eigentlichen Zeichen.

Aber schauen wir uns mal das Konstrukt an. Du sagst htmlentities(), dass es den übergebenen String als UTF-8-kodiert ansehen soll. Die Funktion kann aber nur dann ein richtiges Ergebnis bringen, wenn du den übergebenen String erst noch in UTF-8 umkodierst. Warum nimmst du dann nicht gleich ISO-8859-1/Latin1 - sprich, htmlentities() ohne charset-Parameter (falls du dich doch nicht entschließen kannst, auf htmlspecialchars() umzusteigen)? Oder anders gefragt, warum nahmst du an, UTF-8 zu verarbeiten, wenn dem ja gar nicht so ist?

Jedenfalls bekommst du einen Leerstring geliefert, wenn die Kodierung offensichtlich nicht zum angegebenen Wert passt, also hier kein gültiges UTF-8 ist. Das PHP-Handbuch schweigt sich allerdings aus, wie die Funktion im Fehlerfall reagiert.

Lo!