Pregunta

Todavía estoy aprendiendo las cuerdas con PHP & amp; MySQL y yo sabemos que estoy haciendo algo mal aquí con la forma en que se configuran los conjuntos de caracteres, pero no puedo entender bien leyendo aquí y en la web qué debo hacer.

Tengo una instalación LAMP estándar con PHP 5, MySQL 5. Configuré todo con los valores predeterminados. Cuando algunos de mis usuarios ingresan comentarios a nuestra base de datos, algunos caracteres se muestran de forma incorrecta, en su mayoría apóstrofes y guiones en el momento. En MySQL, las apostrostrofes se muestran como & # 226; & # 8364; & # 8482 ;. También se muestran en la página de esta manera (estoy usando htmlentities para enviar los comentarios de los usuarios).

En phpMyAdmin dice que mi conjunto de caracteres MySQL es UTF8-Unicode.

En mi base de datos, todas mis tablas están configuradas con el valor predeterminado Latin1-Swedish-ci.

Todas mis páginas web tienen meta http-equiv = " Content-Type " contenido = " texto / html; conjunto de caracteres = utf-8 "

Cuando veo los encabezados http del sitio, veo: Content-Type: text / html

Como un novato, no había considerado ningún conjunto de caracteres hasta que las cosas empezaron a parecer extrañas en algunas de mis páginas. Entonces, ¿tiene sentido para mí convertir todo a utf-8 y esto afectará mi código PHP? ¿O debería tratar de poner todo en latín? ¿Y tengo que ir a la base de datos y reemplazar estos códigos impares, o se mostrarán mágicamente una vez que configure los conjuntos de caracteres correctamente? Todos los problemas que he hecho hasta ahora no han ayudado (configuré los encabezados http a utf-8 y también probé latin).

¿Fue útil?

Solución

http://www.phpwact.org/php/i18n/charsets

Ese sitio me dio muchos buenos consejos sobre cómo hacer que todo funcione bien en UTF-8.

También recomendé cambiar de htmlentities a htmlspecialchars, ya que es más compatible con UTF.

El punto principal es asegurarse de que todo esté hablando el mismo idioma. Su base de datos, su conexión de base de datos, su PHP, su página está en utf8 (debería tener una etiqueta meta y un encabezado que lo diga).

Otros consejos

Si realmente quieres entender estos problemas, empezaré por leer este artículo en mysql.com . Básicamente, usted quiere que todas las piezas del rompecabezas esperen unicode UTF-8. En el lado de PHP, quieres hacer algo como:

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

Y cuando ejecute las consultas de inserción, querrá asegurarse de que tanto la codificación de caracteres de la tabla como la en la que está ejecutando las consultas sean UTF-8. Puede lograr esto último ejecutando la consulta SET NAMES utf8 justo antes de ejecutar una consulta de inserción.

Lo siento por no entender toda tu pregunta. Pero cuando parte de la pregunta es " ¿UTF-8 o no? & Quot ;, la respuesta es: ¡" UTF-8, por supuesto! & Quot;

Definitivamente quieres arreglar las cosas ahora y no más tarde. Una de las reglas de programación más importantes es no seguir adelante con una mala idea. ¡No te profundices más!

Como latin1 y utf-8 son compatibles, puede convertir sus tablas para usar utf-8 sin manipular los datos que se contienen a mano. MySQL ordenará esta parte por ti.

Entonces es importante verificar que todo está hablando en utf-8. Establezca los encabezados http en apache o use una etiqueta meta, esto le dice a un navegador que la salida HTML es utf-8.

Teniendo esto en cuenta, debes asegurarte de que todos los datos que envíes sean realmente utf-8. Configure su IDE para guardar archivos php / html como utf-8. Finalmente, asegúrese de que PHP esté utilizando una conexión utf-8 a MySQL: realice esta consulta después de conectarse:

SET NAMES 'utf-8';
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top