Los caracteres multibyte pueden ser complicados en la programación.
mbstring no está habilitado de forma predeterminada. Asegúrate de leer esa parte antes.
Un documento puede contener cadenas multibyte. Si bien PHP tiene muchos asistentes útiles para cadenas, estos asistentes simplemente no están destinados a cadenas multibyte.
Es probable que cause errores desagradables y otros errores inesperados, especialmente cuando cuentas caracteres.
Es por eso que prefieres usar funciones de cadena multibyte en PHP.
Además, nuevas funciones de cadenas multibyte, como mb_trim, mb_ltrim y mb_rtrim estarán disponibles en 8.4 (la próxima versión de PHP en el momento de escribir este artículo).
El inglés utiliza el juego de caracteres ASCII, por lo que letras como r o s solo requieren un byte.
Por el contrario, algunos idiomas utilizan caracteres que necesitan más de un byte, por ejemplo, los caracteres Han (¡pueden tener hasta 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);// ミング
Puede que leas que las funciones mbstring pueden tener un impacto significativo.
Incluso puedes reproducirlo con el siguiente 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; $iFuente: errores de PHP
Las funciones mb_* son más lentas, pero siempre es una compensación, y solo el contexto debería determinar si debes usar estos asistentes o crear los tuyos propios.
Por ejemplo, si reemplaza $cnt = 100000; por $cnt = 100; en el script anterior, los asistentes mb_* siguen siendo significativamente más lentos, pero el impacto final podría estar bien en su caso (p. ej., 0,008 ms frente a 0,004 ms).
Envolver
Debes tener en cuenta los multibytes, especialmente en un contexto multilingüe, y PHP tiene ayudas integradas para eso.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3