2011-03-08 12 views
9

Cuando mi script PHP se ejecuta con la codificación UTF-8, usando caracteres no ascii, algunas funciones de PHP como strtolower() no funcionan. Podría usar mb_strtolower, pero este script se puede ejecutar en todo tipo de plataformas y configuraciones diferentes, y la extensión de cadena multibyte podría no estar disponible. Podría verificar si la función existe antes de su uso, pero tengo funciones de cadena dispersas en todo mi código y preferiría no reemplazar cada instancia.¿Qué establece set_locale (LC_CTYPE, 'C'); en realidad?

Alguien sugirió usar set_locale(LC_CTYPE, 'C'), lo cual dice que hace que las funciones de cadena funcionen correctamente. Esto suena bien, pero no quiero introducir ese cambio sin entender exactamente lo que está haciendo. He usado set_locale para cambiar el formato de los números anteriormente, pero no he usado el indicador LC_CTYPE antes, y realmente no entiendo lo que hace. ¿Qué significa el valor 'C'? ¡Gracias!

+3

Referencia: http://php.net/manual/en/function.setlocale.php (No explica qué es 'C', no se entiende como RTFM, solo para completar) –

Respuesta

8

C significa "utilizar cualquier configuración regional está codificada" (y dado que la mayoría de los programas * NIX están escritos en C, se llama C). Sin embargo, generalmente no es una configuración regional UTF8. Se requiere que utilizan las contrapartes mb_ -

Si está utilizando juegos de caracteres de varios bytes como UTF8 que no puede utilizar las funciones de cadena regulares. Sin embargo, casi todas las instalaciones de PHP deben tener esta extensión habilitada.

+0

Gracias por la explicación: si hago que el valor sea configurable por el usuario, ¿funcionaría? P.ej. el usuario podría ingresar su configuración regional actual en un archivo de configuración, y luego llamar a set_locale (LC_TYPE, $ config_value); - ¿Eso negaría la necesidad de usar las funciones mb_? ¿O todavía tendría que usarlos de todos modos? – Russ

+0

¡Puede activar las funciones mb_ * globalmente! – powtac

+0

@ powtac no si está en un alojamiento compartido que no lo admite. –

Cuestiones relacionadas