Domanda

Vorrei scrivere un parser (HTML) sulla base di macchina a stati, ma ho dei dubbi come leggere acctually / utilizzare un ingresso. Decisi di caricare l'intera ingresso in una stringa e poi lavorare con esso come con un array e mantenere la sua posizione di indice come analisi corrente.

Non sarebbe problemi con codifica a singolo byte, ma in multi-byte codificano 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 iterate attraverso la stringa in un ciclo per controllare singoli caratteri, perché non so mai se io sono nel bel mezzo di un carattere o meno.

Quindi le domande sono:

  • Come faccio sicurezza multi-byte leggere un singolo carattere da una stringa in un prestazioni modo amichevole?
  • E 'buona idea di lavorare con il stringa come fosse una matrice in questo caso?
  • Come vi leggere l'input?
È stato utile?

Soluzione

http://php.net/mb_string è la cosa che stai cercando

  • solo personaggi mb_substr uno per uno
  • non fino php6
  • che cosa esattamente ingresso? Il solito modo, in generale

Altri suggerimenti

mb_internal_encoding("UTF-8");

$mb_string = 'žščř';

$l=mb_strlen($mb_string);

for($i=0;$i<$l;$i++){
    print(mb_substr($mb_string,$i,1)."<br/>");
}

Senza usare i mdb_relatedFunctions e con più byte stringhe codificate è possibile utilizzare le funzioni standard sottostringa che leggono in multipli del byte utilizzati per la codifica.

Ad esempio per una stringa UTF-8 codificato (2 byte) se necessario il primo carattere dalla stringa

$string = 'žščř'; //4 multi-byte characters in UTF-8

Si deve ottenere la stringa $ [0] e $ string [1] valori, quindi in realtà si sta cercando la sottostringa tra gli indici 0 e 1 (per il primo carattere).

Si noti che $ string [0] o $ string [N] farà riferimento il primo (o l'ennesimo byte della stringa multi-byte)

saluti,

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top