2011-01-07 8 views
11

Siempre he usado la codificación ISO-8859-1, pero ahora voy a UTF-8.Problemas UTF-8 PHP/MySQL

Lamentablemente no puedo hacer que funcione.

Mi base de datos MySQL es UTF-8, mi documento PHP está codificado en UTF-8, configuré un juego de caracteres UTF-8, pero todavía no funciona.

(es caracteres especiales como AE/o/a que no funciona)

Espero que ustedes pueden ayudar!

+0

¿Están sus metaetiquetas configuradas como UTF-8? –

+0

aquí hay algunos consejos y soluciones de Goo utf-8 sobre problemas de codificación: http://www.utf-8.de/index.php?area=tutorials –

+0

hmm ¿qué es exactamente lo que no funciona con esos caracteres? lo que pegue arriba es válido utf8 http://hexutf8.com/?q=c3a62fc3b82fc3a5 – jar

Respuesta

19

Asegúrese de que la conexión a su base de datos también está utilizando este conjunto de caracteres:

$conn = mysql_connect($server, $username, $password); 
mysql_set_charset("UTF8", $conn); 

De acuerdo con la documentación de mysql_set_charset en php.net:

Note: 
This is the preferred way to change the charset. Using mysql_query() to execute 
SET NAMES .. is not recommended. 

Ver también: http://nl3.php.net/manual/en/function.mysql-set-charset.php

Comprobar el juego de caracteres de la conexión actual con:

echo mysql_client_encoding($conn); 

Ver también: http://nl3.php.net/manual/en/function.mysql-client-encoding.php

Si ha hecho estas cosas y añadir caracteres extraños a su mesa, verá que se muestra correcta.

+2

Tenga en cuenta que a partir de PHP 5.5.0, 'mysql_set_charset' está en desuso, vea http://php.net/manual/en/function.mysql-set-charset.php. Como referencia, la página indica: ** Advertencia Esta extensión está en desuso a partir de PHP 5.5.0 y se eliminará en el futuro. En su lugar, se debe utilizar la extensión MySQLi o PDO_MySQL. ** –

+0

mysqli_set_charset ($ con, "utf8"); ([w3school] (https://www.w3schools.com/php/func_mysqli_set_charset.asp)) – StinkyCat

9

Recuerde establecer la codificación de conexión a utf8 también.

En ext \ mysqli hacer $mysqli->set_charset("utf8")

En ext \ mysql hacer mysql_set_charset("utf8")

con otras extensiones db puede que tenga que ejecutar la consulta como SET NAMES 'utf8'

Some more details about connection encoding in MySQL

Como otros señale, asegurarse de que su código fuente esté codificado en utf-8 también ayuda. Preste especial atención a no tener BOM (Marca de orden de bytes): se enviaría al navegador antes de ejecutar cualquier código, por lo que usar encabezados o sesiones sería imposible.

1

¿Estás teniendo este error? MySql SELECT UNION Mix ilegal de colaciones ¿Error? Sólo que establecer toda mysql para UTF-8 a continuación

SET character_set_connection = utf8; 
1

probar este después de conectar a MySQL:

mysql_query("SET NAMES 'utf8'"); 

y codificar documentos PHP en UTF-8 sin BOM.

2

Después de conectarse a DB, ejecutar la consulta SET NAMES UTF8

$db = new db(...); 
$db->query('set name utf8'); 

y añadir esta etiqueta a la cabecera del

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
+0

este sustituto de http ayuda nada. ¿por qué no enviar un encabezado HTTP ** original **? –

1

Tuve el mismo problema, pero ahora está resuelto. Aquí está la solución:

primero: actualizar mesa de UR ALTER TABLE nombre_tabla default SET utf8 COLLATE utf8_general_ci;

segundo: añadir esto en la sección de cabecera del código HTML:

Saludos Saleha A.Latif

1

Hoy en día DOP es la forma recomendada para usar MySQL. Con eso debes usar la cadena de conexión para establecer la codificación. Por ejemplo: "mysql: host = $ host; dbname = $ db; charset = utf8"

+0

¡¡Eso es todo !!! Gracias. – Kabkee