2010-03-25 17 views
22

tengo algo de texto en idioma extranjero en mi página, pero cuando lo hago con una letra minúscula, que empieza a parecerse a esto ...problemas con la función strtolower


$a = "Երկիր Ավելացնել"; 
echo $b = strtolower($a); 
//returns ����� ��������� 

he fijado <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ¿podría decirme por qué? gracias de antemano

+0

Los Unicode monstruo pega otra vez! Aquí, tiene un enlace: http://www.joelonsoftware.com/articles/Unicode.html –

+0

¿Hay incluso algo así como minúsculas árabes o lo que sea?: P – Fabian

+0

Asegúrese de enviar el encabezado Content-Type también, en algunos navegadores tiene prioridad sobre la metaetiqueta. –

Respuesta

46

han intentado con mb_strtolower()?

+0

sí, lo he probado. no funciona – Simon

+1

@Syom ¿especificó UTF-8 como la codificación? –

+1

también podría necesitar mb_internal_encoding() primero – SteelBytes

2

En su lugar, use mb_strtolower, ya que strtolower no funciona en caracteres de varios bytes.

+0

'strtolower' realmente funciona en caracteres multibyte, simplemente funciona fuera de la configuración regional actual, que generalmente no es lo que quiere en estos casos. –

1

strtolower() realizará la conversión sólo en la configuración regional seleccionada en ese momento.

Lo intentaría mb_convert_case(). Asegúrese de especificar explícitamente una codificación.

17

PHP5 no es compatible con UTF-8, por lo que aún necesita recurrir a la extensión mb. Le sugiero que establece la codificación interna de MB a UTF-8 y luego se puede utilizar libremente sus funciones sin especificar el juego de caracteres todo el tiempo:

mb_internal_encoding('UTF-8'); 

... 

$b = mb_strtolower($a); 
echo $b; 
3

Php por defecto no sabe acerca de utf-8. Asume que cualquier cadena es ASCII, por lo que strtolower convierte bytes que contienen códigos de letras mayúsculas A-Z a códigos de minúsculas a-z. Como las letras UTF-8 que no son ascii están escritas con dos o más bytes, el strtolower convierte cada byte por separado, y si el byte contiene código igual a las letras A-Z, se convierte. En el resultado, la secuencia se rompe y ya no representa el carácter correcto.

Para cambiar esto es necesario configurar la extensión mbstring:

http://www.php.net/manual/en/book.mbstring.php

para reemplazar strtolower con mb_strtolower o uso mb_strtolower direclty de. En cualquier caso, necesita dedicar algo de tiempo para configurar los ajustes de mbstring para que coincidan con sus requisitos.

8

he encontrado esta solución de here

$string = 'Թ'; 
echo 'Uppercase: '.mb_convert_case($string, MB_CASE_UPPER, "UTF-8").''; 
echo 'Lowercase: '.mb_convert_case($string, MB_CASE_LOWER, "UTF-8").''; 
echo 'Original: '.$string.''; 

funciona para mí (en minúsculas)

Cuestiones relacionadas