Tach!
Könnte man nicht direkt mit preg_replace das BOM entfernen?
preg_replace("/^\xEF\xBB\xBF/", '', $str);
Kann man, und das halte ich auch so für besser als noch eine weitere Funktion aufzurufen, die relativ ungebräuchlich und nicht so einfach verständlich ist.
$bom = pack('H*','EFBBBF');
$str = preg_replace("/^$bom/", '', $str);
Das direkte Notieren ist auch ausführtechnisch einfacher. In der pack-Zeile muss der PHP-Syntax-Parser das Stringliteral erkennen und zu einem 6-Zeichen-String verarbeiten. Dann der Aufruf von pack() und diese Funktion muss die 6 Zeichen nochmal interpretieren und dann entsprechend H* in 3 Bytes konvertieren. Notiert man die Zeichen als Escape-Sequenz direkt in den String der preg_replace-Funktion (oder meinetwegen auch in eine Hilfsvariable), dann muss da nur der PHP-Parser die Zeichen erkennen und kann die 3 Byte auf direktem Wege erstellen.
dedlfix.