2011-10-28 20 views
5

Actualmente estoy tratando de eliminar todos los caracteres especiales y acentos de una cadena UTF-8 convirtiéndolos en su equivalente carácter ASCII si es posible.¿Por qué el iconv de PHP necesita setlocale?

Así que estoy simplemente usando este código:

$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input); 

El problema es que por ejemplo la palabra "debut" se convierte en "dbut" en lugar de "debut". para hacer que funcione, necesito añadir una llamada a setlocale, así:

setlocale(LC_ALL, 'en_US.UTF8'); 
$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input); 

Y no entiendo por qué. Pensé que UTF-8 y ASCII siempre eran lo mismo, cualquiera que sea el lugar que uses.

EDIT: No me refiero a UTF-8 es igual a ASCII, me refería a UTF-8 siempre es igual a UTF-8 y ASCII siempre es igual a ASCII

+0

ASCII y UTF-8 no son lo mismo. UTF-8 es más grande por órdenes de magnitud. – NikiC

Respuesta

1

El subconjunto de UTF-8 que se superpone con ASCII (que es el código puntos 0-127) es idéntico a ASCII. Sin embargo, los caracteres latinos acentuados no son parte del juego de caracteres ASCII y si no lo hace usted setlocale, la configuración regional predeterminada del sistema (que evidentemente no contiene estos caracteres acentuados) se utiliza para obtener un conjunto de caracteres para trabajar.

En general, iconv puede ser un poco dudoso; esto se menciona en la introduction de la extensión:

Este módulo contiene una interfaz para iconv instalación de conversión de juego de caracteres . Con este módulo, puede convertir una cadena representada por un juego de caracteres local en uno representado por otro juego de caracteres, que puede ser el juego de caracteres Unicode. Los juegos de caracteres admitidos dependen de la implementación iconv de su sistema. Tenga en cuenta que la función iconv en algunos sistemas puede no funcionar como esperaba. En tal caso, sería una buena idea instalar la biblioteca libiconv de GNU. Lo más probable es que termine con resultados más consistentes.

Cuestiones relacionadas