I have the same problem if I don’t specify the encoding as the last parameter mb_substr: it is by default, at least to my server, before ISO-8859-1.
But, if I set the encoding correctly UTF-8, it works fine:
echo mb_substr('ááááá', 0, 5, 'UTF-8');
Returns the desired screen in the browser:
ááááá
. mb_substr (, ):
string mb_substr ( string $str , int $start [,
int $length [, string $encoding ]] )
encoding . , .