Moin!
if(strtolower($line_ar[$ark])== $_GET['cityzip'] ){print_r($line_ar);break;}
$line_ar ist die jeweilige Zeile in der TEXT-DB die ich mittels explode zerlegt hatte. Nun bin ich eigentlich davon ausgegegangen, wenn der Name($_GET['cityzip']) im test klein geschrieben wird, müsste er auch gefunden werden. IRRTUM. Nach Fehlersuche an falscher Stelle und schon bereit hier zu fragen fand ich heraus: kleinschreiben bei UTF-8 reicht nicht aus unter den Umständen, ich musste tatsächlich auch noch:
if(strtolower($line_ar[$ark])== strtolower($_GET['cityzip']) ){print_r($line_ar);break;}
$_GET['cityzip'] mit strtolower behandeln, obwohl bereits klein geschrieben. Ich verstehe es zwar nicht und normalerweise wäre es mir auch gar nicht aufgefallen, weil ausserhalb der Testumbgebung ich die Usereingabe eh noch formatiert hätte, aber es wundert mich doch enorm.
strtolower() arbeitet byteorientiert, d.h. es zerstört dir unter Umständen deine Mehrbyte-UTF-8-Zeichen, weil es die einzelnen Bytes jeweils separat voneinander in Kleinbuchstaben wandelt (was schiefgehen kann oder zu keiner Veränderung führt, wenn für das Byte kein Kleinbuchstabe bekannt ist).
Deine "Lösung" zerstört jetzt in beiden Strings gleichartig die UTF-8-Zeichen, damit paßt es dann wieder. Ist aber alles andere als eine schöne Lösung, weil ich keine Hand dafür ins Feuer legen würde, dass die Art der Zerstörung in jedem denkbaren Fall immer dieselben Auswirkungen hat.
Wenn du mit UTF-8 arbeitest, dann sorge entweder dafür, dass alle Stringfunktionen ausschließlich in der Datenbank ablaufen (die weiß mit UTF-8-Strings umzugehen), oder setze ausschließlich die mb-Funktionen ein.
- Sven Rautenberg