elseif(stripos(strrev($name), 'ß') === 0)
Das Problem ist, dass im UTF-8 das Zeichen ß zwei zeichen sind, soviel ich weiß.
Nein, ß ist immer nur ein Zeichen, es wird in utf-8 lediglich in Form von zwei Bytes gespeichert.
Das ß wird einfach nicht richtig erkannt, jawohl alle Dateien, Server-Einstellungen und und und auf UTF-8 stehen.
Dein Problem ist, dass PHP schlampig geschrieben wurde (jawohl) und Zeichenketten nicht als Zeichenketten, sondern als Byteketten behandelt. strrev() dreht dementsprechend nicht die Reihenfolge der Zeichen um, sondern die der Bytes, was sich auf ein Zeichen, das mehr als ein Byte belegt, logischerweise fatal auswirkt; aus den zwei Bytes c3 9f, die das ß in utf-8 darstellen, wird 9f c3. 9f c3 ist a) ein völlig anderes Zeichen (wenn überhaupt) und b) vor allen Dingen nicht c3 9f, mit dem du bzw. stripos() vergleicht. Ist die PHP-Datei davon unabhängig nicht utf-8-kodiert (im Editor einstellen, nicht im Server!), vergleichst du obendrein auch noch mit dem Byte df.