Me gustaría escribir un analizador (HTML) basado en la máquina de estados, pero tengo dudas sobre cómo leer/usar una entrada. Decidí cargar toda la entrada en una cadena y luego trabajar con ella como con una matriz y mantener su índice como la posición actual de análisis.Analizando cadena multibyte en PHP
No habría problemas con la codificación de un solo byte, pero en la codificación de múltiples bytes, cada valor no representa un carácter, sino un byte de un carácter.
Ejemplo:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Salidas:
Ĺ
ž
Ĺ
Ą
Esto significa que no puede iterar a través de la cadena en un bucle para comprobar los caracteres individuales, porque nunca sé si estoy en el medio de un personaje o no.
Así que las preguntas son:
- ¿Cómo se trabaja con múltiples bytes a leer un carácter único de una cadena de una manera amigable rendimiento?
- ¿Es una buena idea trabajar con la cadena ya que era una matriz en este caso ?
- ¿Cómo leerías la entrada?
Tenga en cuenta que la sección de comentarios para 'mb_split' incluye muchos ejemplos de cómo dividir una cadena multibyte en una matriz de caracteres, por ejemplo, http://us2.php.net/manual/en/function.mb-split.php#80046 – Amber
@Dav I don ' Creo que realmente necesita una matriz. –
por entrada me refiero al código HTML para analizar. Tal vez hay una manera completamente diferente de usar la cadena con la máquina de estado que me falta :-) ...pero el mb_substr se ve bien (si conozco la codificación de cadena, que no es tan obvio) –