Pues a mi esto funciona muy bien:
Código PHP:
$cadena = "abcñef";
$i = 0;
while (mb_substr($cadena,$i,1,'UTF-8')) {
printf("Char: %s \n",mb_substr($cadena,$i,1,'UTF-8'));
$i++;
}
A lo mejor tienes que hacer las dos cosas, efectivaente yo tambien tengo la pagina codificata con utf-8
PS mb quiere decir exactamente multibyte