Caracteres multibyte podem ser complicados na programação.
mbstring não está habilitado por padrão. Certifique-se de ler essa parte antes.
Um documento pode conter strings multibyte. Embora o PHP tenha muitos auxiliares úteis para strings, esses auxiliares simplesmente não se destinam a strings multibyte.
Provavelmente causará bugs desagradáveis e outros erros inesperados, especialmente quando você contar caracteres.
É por isso que você prefere usar funções de string multibyte em PHP.
Além disso, novas funções de string multibyte, como mb_trim, mb_ltrim e mb_rtrim estarão disponíveis na versão 8.4 (a próxima versão do PHP no momento em que este artigo foi escrito).
O inglês usa o conjunto de caracteres ASCII, portanto letras como r ou s requerem apenas um byte.
Em contraste, alguns idiomas usam caracteres que precisam de mais de um byte, por exemplo, caracteres Han (podem ter até 6 bytes!).
$strings = [ "?????", "チャーミング", "González", ]; foreach ($strings as $string) { echo 'strlen:' . strlen($string) . ' vs. mb_strlen:' . mb_strlen($string) . PHP_EOL; }
echo strpos("チャーミング", "ャ"); // gives 3 echo mb_strpos("チャーミング", "ャ"); // gives 1 because 1st position is 0
echo substr("チャーミング", 3) . PHP_EOL;// ャーミング echo mb_substr("チャーミング", 3);// ミング
Você pode ler que as funções mbstring podem ter um impacto significativo.
Você pode até reproduzi-lo com o seguinte script:
$cnt = 100000; $strs = [ 'empty' => '', 'short' => 'zluty kun', 'short_with_uc' => 'zluty Kun', 'long' => str_repeat('this is about 10000 chars long string', 270), 'long_with_uc' => str_repeat('this is about 10000 chars long String', 270), 'short_utf8' => 'žlutý kůň', 'short_utf8_with_uc' => 'Žlutý kŮň', ]; foreach ($strs as $k => $str) { $a1 = microtime(true); for($i=0; $iFonte: bugs do PHP
As funçõesmb_* são mais lentas, mas é sempre uma compensação, e somente o contexto deve determinar se você deve usar esses auxiliares ou criar os seus próprios.
Por exemplo, se você substituir $cnt = 100000; por $cnt = 100; no script acima, os auxiliares mb_* ainda são significativamente mais lentos, mas o impacto final pode ser bom no seu caso (por exemplo, 0,008 ms vs. 0,004 ms).
Concluir
Você deve levar em conta os multibytes, especialmente em um contexto multilíngue, e o PHP possui ajudantes integrados para isso.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3