Ich bin heute schon länger einem komischen Bug auf der Spur.
Das Setting:
Ich hoste eine Owncloud selbst. Auf einem Server liegt ein selbst gebastelter Webdav client, der mir Files zur Cloud hin synced. Dafür ruft er die Liste der Files in Ordner XY ab und vergleicht die mit dem lokalen Dateisystem.
Heute kam es dann vor, dass eine Datei unendlich oft hochgeladen wurde, obwohl sie bereits existierte.
Der Grund dafür, die File auf dem Dateisystem hatte ein ü im Namen. Um genau zu sein, ein normales u mit diesem Unicode-Zeichen "dahinter".
Da hab ich erst mal nicht schlecht gestaunt und dann einen Bug in meinem Script vermutet, kann ja mal vorkommen, sowas hatte ich damals sicher nicht auf dem Schirm.
Jetzt, 2 Stunden später, bin ich um einiges Schlauer. Der Bug liegt nicht in meinem Script, sondern in der Owncloud, bzw im darunter liegenden Symfony Framework. Es ist auch nicht wirklich ein Bug, es scheint ein gewolltes verhalten zu sein.
In Zeile 54 der File canonicalComposition.php wird das "falsche" ü zum "normalen" ü gemacht, welches man auch über die Tastatur erzeugen kann.
Nun hat mein Script natürlich das Problem, dass der Filename nicht mehr matched, wenn es prüft, ob die Datei schon in meiner Cloud exisitert..
Da frage ich mich, selbst professioneller PHP Entwickler, wieso? Wieso den Wert nicht "as-is" lassen und einfach damit umgehen, was der User rein wirft? Jetzt muss ich in meinem Script auch eine solche Tabelle zur "Übersetzung" anlegen.
Falls es interessiert:
"normales" ü, url encodiert: %C3%BC, UTF-8 Char: 00FC
"falsches" ü, url encodiert: u%CC%88, u + UTF-8 Char: 0308