Doch leider funktioniert die Funktion bei mir nicht...
Da war ein Fehler drin, den ich verbockt habe, als ich den Code hier im Forumsformular nochmal verschlankt hatte:
// Gelesenen Unicode-Wert prüfen
if (($x !== false) || ($i != $u["sequenz"] - 1) || ($x < $u["min"])) {
$x = false;
if (($x === false) || ($i != $u["sequenz"] - 1) || ($x < $u["min"])) {
$x = false;
Die erste $x-Prüfung muss === sein, nicht !==.
Falls es dir etwas merkwürdig vorkommt, dass ich erst prüfe, ob x false ist, und falls ja, x auf false setze, obwohl x doch schon false ist: Die x-Prüfung steht da, weil x gleichzeitig anzeigt, ob in u gültige utf-8-Sequenzdaten drinstehen. Nur, wenn x nicht false ist, hat die $utf-Schleife zuvor auch etwas Brauchbares in u hinterlassen.
Hast du die Zeile
//$utf[] = Array("sequenz" => "1", "startmaske" => 128, "startcode" => 0, "min" => 0); // - ein Byte lässt sich gesondert schneller behandeln
absichtlich auskommentiert?
Diese Zeile hatte ich nur drin, weil theoretisch auch Ein-Byte-Sequenzen mit der Schleife abgefragt werden können, ein reiner Hinweis, dass es auch ginge. Es ist jedoch schneller, wenn man einfach schaut, ob ein Byte kleiner als 128 ist, anstatt in der $utf-Schleife (($c & 128) == 0) zu prüfen.
Irgend eine Idee was ich anders mache als Du?
Ja, du hast den Kram ausprobiert :-]