2011-01-18 14 views
10

Hola a todos. Estoy desarrollando un nuevo sitio (php5/mySQL) y estoy buscando finalmente subirme al tren Unicode. Debo admitir que no sé casi nada sobre el soporte de Unicode en este momento, pero espero resolverlo con su ayuda.¿Guías para tratar con Unicode en PHP5?

Después de exprimir desesperadamente mis minúsculas y patéticas excusas para los músculos de Googlefu y recorrer cada página que parecía prometedora para mis ojos novatos Unicode, he llegado a la conclusión de que, aunque no es totalmente compatible, mi precioso lenguaje de elección (PHP para aquellos que lo han olvidado) ha hecho al menos un intento a medias de manejar a la bestia extranjera (¿y de qué otra cosa veo, teniendo éxito?). También he llegado a la conclusión de que

<php header('Content-Type: text/html; charset=utf-8'); ?> 

es un gran lugar para comenzar y que debería estar buscando en el apoyo a UTF-8 ya que tengo un montón de espacio en mi (compartido, por el momento) de alojamiento.

Sin embargo, no estoy seguro de qué significa esta extraña funcionalidad conocida como mb_ * o cómo incorporarla en funciones como strlen() y. . . para ser honesto en este punto, no sé qué otra funcionalidad (que no puedo vivir sin) se ve afectada.

Así que he venido a ustedes SO-ites en busca de iluminación y posiblemente enderezando mi cerebro confundido (¡donde Unicode está preocupado!). Realmente quiero apoyarlo pero necesito ayuda seria.

P.S .: ¿Afecta Unicode a mysql_real_escape_string() o cualquier otra medida de prevención/seguridad de XSS? ¡Necesito estar al tanto de esto también!

Gracias de antemano.

  • Añadiendo Javascript en la mezcla, ya que voy a usar una mezcla de pure y jQuery y no sé si Unicode admite + este idioma. ;)
+1

+1 para hacer las preguntas que muy pocos preguntan. Unicode es algo que todo programador debe entender. – Thanatos

+0

Por no hablar de PHP y Unicode no es muy sencillo – GWW

+0

Centrarse en la comprensión de conjuntos de caracteres, codificaciones de caracteres, un poco binario. Esto es bastante independiente del lenguaje. Una vez que empiezas a dominarlo, te darás cuenta de que las "deficiencias" de php no son realmente un gran problema. – goat

Respuesta

5
  1. Bienvenido a bordo de UTF-8 :)
  2. Usted debe utilizar simplemente mb_nogueira @ yahoo.com * funciones en lugar de sus tradicionales funciones str *
  3. MySQL y su API tiene larga y bien sido compatible con utf8, , el único requisito que usted usa codificación al guardar datos y conectando. google para 'SET NAMES utf8'
  4. Tenga en cuenta el modificador 'u' para las funciones preg_ * que les indica que utilicen el modo Unicode en .
+2

PD Sus archivos de código fuente deben ser utf8 SIN BOM, ya que hacen que la salida antes de PHP siquiera se inicie y causa problemas extrañamente extraños de "Encabezados ya enviados". –

+0

1) Muchas gracias. Estoy feliz de estar aquí. :) 2) ¿Hay algún lugar tipo "trampa" que los liste, o un lugar que muestre cómo hacerlo? (El erm manual de PHP, bueno, casi me perdió). 3) Encontré mucho al menos, y cómo almacenar en UTF-8. 4) '/ u', ¿verdad?5) Uso Notepad ++ corriendo en Wine, entonces para responder a su respuesta, selecciono "UTF-8 sin BOM" y ¿eso debería resolver el archivo de código fuente? - También, lo siento, esta es una confusión de una respuesta. Soy un poco nuevo para responder aquí y no sé si hay alguna forma de cambiar de línea, ya que presionar la tecla Enter parece enviar mis comentarios a lo largo de su camino. – Zydeco

+0

2) lo siento, nunca tuve ninguna, la documentación original de php fue lo suficientemente buena para mí 4) yup! 5) sí, suena bien. Por cierto, ni siquiera estoy seguro de que los comentarios sobre los saltos de línea SO apoyo en absoluto :) –

0

Cuando se trabaja con Unicode:

  • uso <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> en la parte superior de la página cuando la salida
  • justo después de que se conecte a la base de datos, use la consulta SQL: mysql_query("set names 'utf8'");
  • asegúrese de que todas las tablas y campos obligatorios tengan un tipo de clasificación de: 'utf8_unicode_ci'
+0

Tenía la impresión de que una combinación del tipo de documento correcto y la etiqueta html funcionaba mejor que el meta. ¿Alguien puede aclarar eso por mí? Y en cuanto a conectarme a la base de datos, pensé que si la página misma estaba codificada con UTF-8 y la base de datos era UTF-8, ¿todo estaba bien allí? – Zydeco

+0

He usado la combinación anterior para que todo funcione. También encontré el 'mysql_query (' set names 'utf8' ") 'necesario. En cuanto a doctype vs meta pregunta, consulte a un experto. –

+0

¿por qué el voto abajo? –