utf8 upper ucfirst strtoupper strtolower primera mb_ucwords mb_strtolower mb_convert_case mayuscula acentos php arrays

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.