Moin Steffen,
Das stimmt, aber wozu muss ich die Codierung hier noch einmal angeben, wenn schon - wie aus den Anfangsbeiträgen hervorgeht - alles auf UTF-8 eingestellt ist?
In Deiner PHP-Datei steht eine Bytesequenz, Du hast die gespeichert als UTF-8. Nehmen wir die Bytesequenz 0xE2 0x82 0xAC 0x31 0x32 0x33 was im Editor oder im Browser die Zeichenfolge
€123
ergibt. Nun ist das erste Zeichen gefragt. Hmm, die mb_FUNKTION muss jetzt wissen, welche Bytes zu welchen Zeichen gehören. Also muss der mb_FUNKTION die Kodierung bekannt sein. Wenn Du das nicht bekanntgibst (zentral in der php.ini oder im Funktionsargument) wird mb_substr() eine Default-Einstellung verwenden, die durchaus auch ISO-8859-1 sein kann. In einem solchen Fall wird mb_substr('€123',1,0) annehmen, 0xE2 wäre das erste Zeichen.
Ist hingegen mb_substr('€123',1,0, 'utf-8') die Kodierung bekannt, werden die Bytes 0xE2 0x82 0xAC als EIN Zeichen betrachtet und das ist das €-Zeichen.
Horst