Rolf B: unverständlicher Unterschied zwischen zwei Strings

Beitrag lesen

Hallo Linuchs,

PHP ist im Prinzip nicht Unicode-fähig. Die Behandlung von Unicode-Strings wurde mit den mb_-Funktionen nachgerüstet, und die Datenbanktreiber können da sicherlich auch etwas beitragen, aber im Standardverhalten betrachtet PHP Strings als Bytefolgen.

file_get_contents gehört dazu, es weiß nichts vom Encoding und liefert Dir daher das BOM als Teil des Passworts mit.

Das BOM ist aber nicht nur das Byte Order Mark, sondern auch ein Unicode-Codepunkt mit der Bedeutung "Nullbreite Leerstelle". Deswegen zeigt der Browser dort eine Leerstelle mit einer Breite von 0 Pixeln an.

Da ein BOM nur schwierig visuell wahrnehmbar ist, besteht die beste Lösung darin, die von file_get_contents gelesene Bytefolge auf ein führendes BOM zu prüfen und das BOM bei Bedarf zu entfernen. Aber Vorsicht, BOM ist nicht gleich BOM. Was Du hier gefunden hast, ist das UTF-8 BOM. Es gibt noch 10 andere, die aber hoffentlich für Dich irrelevant sind. Es könnte auch interessant sein, wenn Du ein UTF-8 BOM in der Textdatei zwingend voraussetzt. Denn dann hast Du eine Zusicherung, dass diese Textdatei auch UTF-8 codiert ist, statt z.B. ISO-8859-15.

Und natürlich funktioniert das alles nur, wenn Du auch vom Browser einen UTF-8 String bekommst, aber das solltest Du über das Encoding der gesendeten HTML Seite sicherstellen können.

Rolf

--
sumpsi - posui - clusi