php - upper - mb_strtolower y utf8 cadenas
strtoupper php acentos (2)
Como saben, necesitamos usar mb_strtolower () en lugar de strtolower () mientras trabajamos con datos de utf-8:
$str = ''برنامه'';
echo strtolower($str);
----------------------
output: �����
Todo se ha ido a caracteres indefinidos, ahora uso mb_strtolower ()
$str = ''برنامه'';
echo mb_strtolower($str);
----------------------
output: �����
sigue siendo el mismo resultado, ahora:
$str = ''برنامه'';
echo mb_strtolower($str, mb_detect_encoding($str));
----------------------
output: برنامه
Ahora está arreglado, por lo que la forma de usar mb_strtolower es tener también mb_detect_encoding.
Ahora mi problema es que quiero hacer lo mismo con array_map:
$results_array = array_map(''mb_strtolower'', $results_array);
¿Cómo se supone que mb_detect_encoding
usar mb_detect_encoding
con la línea anterior?
En pocas palabras, define tu propia función que luego llama mb_strtolower
con mb_detect_encoding
.
$results_array = array_map(function($var) {
return mb_strtolower($var, mb_detect_encoding($var));
}, $results_array);
La solución es decirle a mb_strtolower
cuál es su codificación de cadena:
echo mb_strtolower($str, ''UTF-8'');
Si no desea suministrar este parámetro cada vez, mb_
una vez para todas mb_
funciones mb_
:
mb_internal_encoding(''UTF-8'');
Luego puedes llamar a cualquier función mb_
y manejará tu cadena como UTF-8:
echo mb_strtolower($str); // works without second parameter now
mb_detect_encoding
devuelve ''UTF-8''
porque lo detectó, pero generalmente no es confiable, ya que conceptualmente es imposible detectar de manera confiable cadenas codificadas arbitrariamente. Sepa en qué están codificadas sus cadenas y pase esta información explícitamente.