Pergunta

Eu gostaria de escrever um (HTML) analisador baseado em máquina de estado, mas tenho dúvidas de como efectivamente leitura/utilização de uma entrada.Eu decidi carregar toda a entrada em uma seqüência de caracteres e, em seguida, trabalhar com ele como com uma variedade e manter o índice de análise atual posição.

Não haveria problemas com codificação de byte único, mas na codificação de múltiplos bytes de cada valor não representa um personagem, mas um byte de um personagem.

Exemplo:

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

for($i=0; $i < 4; $i++)
{
   echo $mb_string[$i], PHP_EOL;
}

Saídas:

Ĺ
ž
Ĺ
Ą

Isso significa que não é possível iterar através de seqüência de caracteres em um loop para verificar os caracteres individuais, porque eu nunca sei se eu estou no meio de uma personagem ou não.

Então as questões são:

  • Como faço para multi-byte ler um único caractere de uma seqüência de caracteres em um desempenho de forma amigável?
  • É uma boa idéia para trabalhar com o string como se fosse um array neste o caso?
  • Como você lê a entrada?
Foi útil?

Solução

http://php.net/mb_string é a coisa que você está procurando

  • Apenas MB_Substr caracteres um por um
  • até o php6
  • Que entrada exatamente? A maneira usual em geral

Outras dicas

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/>");
}

Sem utilizar o mdb_relatedFunctions e com multi-byte cadeias de caracteres codificada pode utilizar o padrão de sub funções de seqüência de caracteres que ler em múltiplos de bytes usados para a codificação.

Por exemplo, para uma codificação UTF-8 (2 bytes) de seqüência de caracteres se você precisa do primeiro caractere da string

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

Você tem que chegar a $string[0] E $string[1] valores, então você está realmente olhando para a subseqüência de caracteres entre os índices 0 e 1 (para o primeiro caractere).

Note que $string[0] ou $string[N] vai referência o primeiro (ou n-Ésimo byte de multi-byte string)

cumprimentos,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top