Este es mi problema: ¡Mi idioma (portugués) usa la codificación de caracteres ISO-8859-1! Cuando quiero acceder a un personaje de una cadena como 'coração' (corazón) yo uso:¿Hay una manera simple de obtener un carácter de una cadena multibyte en PHP?
mb_internal_encoding('ISO-8859-1');
$str = "coração";
$len = mb_strlen($str,'UTF-8');
for($i=0;$i<$len;++$i)
echo mb_substr($str, $i, 1, 'UTF-8')."<br/>";
Esto produce:
c o r a ç ã o
Esto funciona bien ... Pero mi problema es si el uso de ¡La función mb_substr no es tan rápida como el acceso normal a una cadena simple! Pero quiero una manera simple de hacer esto ... como en el acceso normal de caracteres de cadena: echo $ str [$ pos] .... ¿Es posible?
Bueno ... Pero mi pregunta es acerca de una forma eficiente de hacer estos accesos. Probé un ciclo normal de concatenación de cadenas ($ new_str. = $ Old_str [2] - solo para probar ...) y usando mb_substr ($ new_str. = Mb_substr ($ old_str, 2, 1, 'UTF-8') y yo obtuve esto (con bucle de 50 000 iteraciones): 0.016 s al acceso normal contra 4.9802091121674 s a la función mb_substr! Es un gran problema de rendimiento! –
Con una codificación de ancho fijo puede usar un multiplicador fijo. –
¿Cómo podría hacer esto entonces? Muéstrame un ejemplo! –