2011-12-20 12 views
7

Escuché que PHP tiene muy poca compatibilidad con Unicode. Entonces, ¿qué se necesita para hacer una aplicación construida en PHP 5 Unicode compatible con PHP 5.3+? ¿Sería mbstring la única opción aquí? ¿Cómo ha superado Facebook o Yahoo esta limitación de PHP?Unicode en PHP?

+1

Siga todas las instrucciones publicadas aquí. Sugiero que descargue Notepad ++ y asegúrese de guardar el archivo como utf8. Muchos editores tienen la mala costumbre de guardar como ansi, que es basura – OptimusCrime

+0

@OptimusCrime Creo que es el mal hábito del programador, no cambiar eso en la configuración, que es posible para casi cualquier editor (al menos aquellos con resaltado de sintaxis) . – feeela

Respuesta

8

PHP tiene ningún apoyo de bajo nivel para cualquier codificación. Pero todo lo que realmente significa es que no le importa un nivel de lenguaje . Las cadenas en PHP son secuencias de bytes sin procesar, que pueden estar en cualquier codificación que desee. Cuando maneje cadenas de múltiples bytes, debe tener cuidado de utilizar la función de manipulación de cadena correcta en lugar de atornillar directamente la secuencia de bytes. Por lo tanto, el único "no soporte" de Unicode es que no incluye el concepto de codificación en el lenguaje central en sí mismo, pero aún se puede trabajar con cualquier codificación perfectamente bien manipulando cadenas usando la función de cadena apropiada.

En realidad, si solo tiene un poco de cuidado para mantener todo en UTF-8 todo el tiempo, rara vez tendrá que preocuparse por nada con respecto a las codificaciones. PHP funciona bien con Unicode.

Para obtener una amplia cobertura de este tema, consulte What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text.

+0

+1 para este enlace –

1

PHP tiene poca compatibilidad con Unicode, pero no es imposible hacerlo, solo tiene que tener cuidado con las funciones que está utilizando y su compatibilidad con Unicode. Esta página tiene un buen resumen del soporte Unicode para las diferentes funciones y extensiones http://www.phpwact.org/php/i18n/utf-8

+3

El artículo vinculado es un poco histérico. El artículo fue escrito en 2009-10-21 y obviamente se refiere a una versión desactualizada de PHP, que además fue compilada sin la extensión mbstring (los paquetes de Linux precompilados más recientes [por ejemplo, los de Debian o Ubuntu] incluyen la mbstring- extensión). Solo usa esa extensión. – feeela

0

Si los datos provienen de tablas que usan UTF-8, debe establecer los encabezados y metadatos correctos y debe estar bien (no es necesario codificar nada):

<?php 
header ('Content-type: text/html; charset=utf-8'); 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 

</body> 
</html> 
+0

Esto no cambiaría nada en el manejo de cadenas mediante PHP, p. Ej. en métodos como 'substr()'. Vea también el enlace en la respuesta de chaft ... – feeela

-1

Los siguientes mbstring-variables se debe establecer a través de php.ini o vhost-configuración (httpd.conf; no funciona por directorio [vía .htaccess]):

mbstring.language = Neutral 
mbstring.internal_encoding = UTF-8 
mbstring.func_overload = 7 

Simplemente deje el código como estaba, haga Asegúrese de que su Editor/IDE solo guarde archivos como UTF-8 y entregue todo como UTF-8 (a través del encabezado HTTP o META-tag).

Ver también: PHP Manual – Multibyte String – Function Overloading Feature