Mbstring e PHP devem ser usados ​​no desenvolvimento de aplicativos da Web

0

Bytes e Bits são duas unidades para armazenar informações lógicas. Um bit pode ser pensado como um buraco, que pode ser preenchido com um dos dois valores: 0 ou 1.

Um byte é um agrupamento de oito bits. Em termos matemáticos, um byte é capaz de representar 256 valores diferentes (28).

Vamos pensar em um idioma, digamos inglês. Possui alguns caracteres (a, b, c, … etc.) que são representados em um computador por bytes. O número total de caracteres em inglês não é superior a 256, portanto, cada caractere pode ser representado usando uma sequência diferente de 8 bits.

Strings são simplesmente uma coleção de caracteres. Normalmente, as operações de string do PHP operam em strings de caracteres de byte único. Por exemplo: você pode querer comparar as strings “Hello" e “Hi”. Com strcmpr(), as duas strings serão comparadas assumindo que cada caractere na string ocupa um byte.

Mas pense em um idioma com mais de 256 caracteres (por exemplo, japonês) ou quando queremos representar caracteres de vários idiomas ao mesmo tempo. Um armazenamento de bytes para cada caractere não é suficiente. É aqui que entra o conceito multibyte.

Uma cadeia de caracteres de texto em japonês pode fazer com que a função strcmpr() retorne um valor incorreto ou lixo, pois a suposição de que um byte representa um caractere não é mais verdadeira. Quando trabalhamos com strings codificadas em vários bytes, a manipulação dessas strings precisa de funções especiais em vez das funções comuns de strings de byte único. Para lidar com strings de vários bytes em PHP, mbstring fornece as funções de string específicas de vários bytes.

Compreendendo o UTF-8

UTF significa Unicode Transformation Format e é um sistema de codificação que visa representar todos os caracteres em todos os idiomas em um conjunto de caracteres. Existem diferentes versões de UTF, algumas das quais são mostradas abaixo:

Formato de Codificação Descrição
UTF-1 Compatível com ISO-2022, obsoleto do padrão Unicode.
UTF-7 Sistema de codificação de 7 bits, usado principalmente em e-mail, mas não faz parte do padrão Unicode.
UTF-8 Sistema de codificação de 8 bits, largura variável e compatível com ASCII.
UTF-EBCDIC Sistema de codificação de 8 bits, largura variável e compatível com EBCDIC.
UTF-16 Sistema de codificação de 16 bits, largura variável.
UTF-32 Sistema de codificação de 32 bits, largura fixa.

Nós nos encontramos usando UTF-8 na maioria das vezes ao trabalhar com texto multibyte, então vamos nos concentrar nisso por um momento. UTF-8 codifica caracteres em vários bytes usando o seguinte esquema:

Então, como ele sabe se um caractere está armazenado em um byte ou em vários bytes? Para isso, ele examina o bit de ordem superior do primeiro byte.

Código Significado
0xxxxxx Um código de byte único
110xxxxx Mais um byte segue este byte
1110xxxx Mais dois bytes seguem este byte
11110xxx Mais três bytes seguem este byte
111110xx Mais quatro bytes seguem este byte
1111110x Mais cinco bytes seguem este byte
10xxxxxx Continuação do caractere multibyte

Cada byte contínuo em uma sequência de bytes múltiplos começa com 1 e 0 em seus dois bits de ordem mais alta para fornecer uma maneira de detectar dados corrompidos.

Equivalentes multibyte de funções de string comuns

Para funções de string comumente usadas, como strlen(), strops() e substr(), existem funções multibyte equivalentes. Você deve usar as funções equivalentes ao trabalhar com strings multibyte.

Tabela 4: Funções de string de vários bytes equivalentes a um único byte

Byte único Multibyte Descrição
strlen() mb_strlen() Obter comprimento da string
strpos() mb_strpos() Encontre a posição da primeira ocorrência de string em uma string
substr() mb_substr() Retornar parte de uma string
strtolower() mb_strtolower() Tornar uma string minúscula
strtoupper() mb_strtoupper() Tornar uma string maiúscula
substr_count() mb_substr_count() Contar o número de ocorrências de substring
dividir() mb_split() Dividir string em array por expressão regular
correspondência() mb_send_mail() Enviar e-mail codificado
erg() mb_ereg() Correspondência de expressão regular
Faz() mb_regi() Correspondência de expressão regular que não diferencia maiúsculas de minúsculas
Deixe-me dar um exemplo de uso da função multibyte:
  • Nome da função: int mb_strlen (string $str [, string $encoding] )

  • Descrição: Obtém o comprimento da string.

  • Parâmetros: str (string de entrada cujo comprimento deve ser determinado)

    codificação (codificação de caracteres)

  • Valor de retorno: Número de caractere da string de entrada str com codificação de codificação de caracteres

  • Tipo de retorno: int

Código de exemplo: Aqui está um código de exemplo de como usar a função mb_strlen. Aqui, a string de entrada é uma palavra chinesa e três opções diferentes de codificação de caracteres são usadas.

$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').

Restrições: UTF-8 tem algumas restrições, como

  • Teoricamente, o comprimento máximo dos caracteres codificados em UTF-8 é de seis bytes.
  • 0xFE e 0xFF nunca são usados ​​nesta codificação.

Habilitar mbstring de php.ini :

  • Confirme a existência de php_mbstring.dll na pasta ext.
  • Descomente ;extension=php_mbstring.dll de php.ini (ou seja, extension=php_mbstring.dll)
  • Reinicie o Servidor.

Configuração de tempo de execução: Para habilitar algumas funções mbstring, mais algumas configurações devem ser alteradas.

Tabela 5: Configurações em php.ini

Nome Valor padrão Opção Mutável
mbstring.idioma neutro PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order NULO PHP_INI_ALL
mbstring.http_input passar PHP_INI_ALL
mbstring.http_output passar PHP_INI_ALL
mbstring.internal_encoding NULO PHP_INI_ALL
mbstring.script_encoding NULO PHP_INI_ALL
mbstring.substitute_character NULO PHP_INI_ALL
mbstring.func_overload 0 PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.encoding_translation 0 PHP_INI_SYSTEM | PHP_INI_PERDIR

Explicação das opções de configuração:

A “Opção alterável” determina o valor do modo alterável. Ele descreve como e de onde as opções mbstring podem ser alteradas. Aqui vai o significado para os valores de modo:

Tabela 6: Modo de alteração diferente

Modo Significado
PHP_INI_SYSTEM Podemos definir a entrada usando php.ini ou httpd.conf
PHP_INI_PERDIR Podemos definir a entrada usando php.ini, .htaccess, httpd.conf ou .user.ini
PHP_INI_ALL Podemos definir a entrada de qualquer lugar
PHP_INI_USER Podemos definir a entrada usando o script do usuário.

Como mudar de script de usuário:

Podemos usar o seguinte código para definir a codificação interna de mbstring do script do usuário:

<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>

Como mudar de php.ini:

Podemos editar o arquivo php.ini para definir algumas opções mbstring.

; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
 
; Enabled HTTP input encoding translation.
mbstring.encoding_translation = On
 
 
; Set default HTTP input character encoding
 
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
Alguns problemas relacionados ao mbstring:

O uso de funções mbstring às vezes pode causar algum assédio a você. Vou discutir aqui alguns problemas de uso de sobrecarga de função multibyte. Vamos pensar um cenário.

Você habilitou a opção mbstring.func_overload em seu arquivo php.ini. Seu trabalho está indo bem. Você está sobrecarregando a função de string de byte único por funções de string de vários bytes. Mas o que acontecerá se você precisar de uma biblioteca externa que frequentemente usa alguma função de string?

Existe uma solução para este problema. Você pode usar mbstring.internal_coding. Quando você chama alguma biblioteca externa, ela usará a codificação de byte único e, quando voltar ao seu projeto, a codificação de multibytes será implementada. Mas o que acontece se houver um retorno de chamada entre seu projeto e a biblioteca externa? Aqui falha.

Portanto, você deve ter em mente esses problemas ao usar as opções mbstring.

Importância do mbstring para desenvolvimento web:

Para desenvolver qualquer aplicativo da web internacional, o uso de mbstring é obrigatório. Caso contrário, sua inscrição será limitada a algumas nações e idiomas específicos. Como desenvolvedor, sugiro que você adquira algum conhecimento neste domínio e se torne um programador web eficiente.

Fonte de gravação: instantshift.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação