Vorrei scrivere un parser (HTML) basato su macchina a stati, ma ho dei dubbi su come leggere/utilizzare un input. Ho deciso di caricare l'intero input in una stringa e quindi lavorare con esso come con un array e mantenere il suo indice come posizione di analisi corrente.Parsing multibyte string in PHP
Non ci sarebbero problemi con la codifica a byte singolo, ma nella codifica multibyte ogni valore non rappresenta un carattere, ma un byte di un carattere.
Esempio:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Uscite:
Ĺ
ž
Ĺ
Ą
Questo significa che non posso scorrere la stringa in un ciclo per controllare singoli caratteri, perché non so mai se mi trovo in al centro di un personaggio o no.
Quindi le domande sono:
- Come posso sicuro multi-byte leggere un carattere singolo da una stringa in modo amichevole prestazioni?
- È consigliabile lavorare con la stringa come se fosse una matrice in questo caso ?
- Come leggeresti l'input?
Nota che la sezione commenti per 'mb_split' ci sono molti esempi su come suddividere una stringa multibyte in una serie di caratteri - ad esempio, http://us2.php.net/manual/en/function.mb-split.php#80046 – Amber
@Dav I don ' Penso che abbia davvero bisogno di un array. –
per input intendo il codice HTML da analizzare. Forse c'è un modo assolutamente diverso di usare la stringa con la macchina a stati che mi manca :-) ...ma mb_substr sembra a posto (se conosco la codifica della stringa, che non è così ovvia) –