2009-11-10 21 views
17

I trasladó datos de MySQL 4 (el que fueron creados a latin2 encoding) para MySQL 5 y establece codificación a utf-8. Se ve bien en phpMyAdmin, y utf-8 está bien. Sin embargo, hay signos de interrogación en lugar de algunos caracteres en el sitio web. La codificación del sitio web también está configurada en utf8, así que no entiendo dónde está el problema.Problema con codificación UTF-8 usando PHP + MySQL

PHP y HTML archivos también están listos para utf8.

no tengo ni idea ...

+8

¡Oh, un clásico! Al igual que el día en que se eliminó la última instancia de IE6, celebraré el día en que el último script PHP se movió a PHP 6. (En este futuro lejano, puedo decirles a mis nietos sobre el monstruo ISO-8859 y su compañero llamado Codepage.) – Boldewyn

+0

lo siento pero, por supuesto, intenté la base de datos de SET NAMES 'utf8' ..on, didnt help. :( – Adriana

+1

Bueno, tiene que ejecutar esa consulta cada vez que su secuencia de comandos se conecta a la base de datos antes de ejecutar otras consultas ... – Franz

Respuesta

28

intento consulta

SET NAMES utf8 

antes de cualquier consulta en su aplicación

+0

no necesario .Establecer la codificación db en utf8 y sin usar 'SET NAMES' funciona bien para mi aplicación. – mauris

+0

Sí, el problema más común. Revise la codificación de su cliente o configúrelo con el comando SQL valya ya publicado. Es suficiente agregarlo antes de cada bloque de declaraciones que envíe a la vez. –

+0

@Mauris, por supuesto, su camino es mejor y más rápido, pero el mío es la solución más simple que se puede obtener en todos los idiomas y entornos sin rtfm :) –

3

Usted no tiene que establecer sus archivos PHP y HTML a UTF-8 .

Simplemente tiene que configurar la codificación de salida en UTF-8 y el navegador se mostrará correctamente.

En HTML:

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

En PHP:

header('Content-Type: text/html; charset=UTF-8'); 

Cuando se obtiene una cadena que es UTF-8 de la tabla de MySQL, será UTF-8 hasta el final al navegador salida a menos que convierta la codificación. Es la forma en que el navegador lo interpreta.

+1

Si almacena caracteres especiales en sus scripts PHP, asegúrese de que sus scripts estén codificados en UTF-8 o no se mostrarán correctamente. Algunos IDEs hacen esto automáticamente y ES un requisito –

13

Pruebe a establecer la conexión de MySQL a UTF-8:

SET NAMES 'utf8' 

Y enviar explícitas UTF-8 cabeceras, sólo en caso de que su servidor tiene algunos otros ajustes por defecto:

header('Content-type: text/html; charset=utf-8'); 
0

que tenía este problema recientemente (espero que sea el mismo problema que está teniendo), lo intenté de muchas maneras pero al final lo que funcionó fue realmente simple.

Convierta su archivo SQL volcado en formato UTF-8 y luego impórtelo.

BW: Usé Notepad ++ para la conversión.

2

poner el archivo .htaccess en la raíz de su sitio web con contenido: AddDefaultCharset UTF-8

y

en su dbconfig establecido después de la conexión a db:

mysql_query ("SET NOMBRES ' utf8 '");

2

Aquí hay una solución. Establezca el encabezado en header ('Content-type: text/html; charset=utf-8'); Luego imprima su contenido usando utf8_decode($content). Debes tener los dos para que funcione.

+0

¿Estás seguro de que no significa 'utf8_encode'? Porque eso es lo que finalmente me solucionó. –

19

En mi servidor, la adición de estos a mi archivo php no tuvo ningún efecto:

ini_set('default_charset','utf-8'); 
mysql_set_charset('utf8'); 
header('Content-type: text/html; charset=utf-8'); 

Pero todo funcionó a la perfección una vez he añadido esto a la parte superior de mi archivo php:

$mysqli->query("SET NAMES 'utf8'"); 

Nota: Estoy usando la codificación utf8_general_ci en mi base de datos, pero utf8_unicode_ci funciona igual para mí.

Espero que ayude.

+0

donde puedo escribirlo? –

+1

simplemente escríbalo en la parte superior de tu archivo index.php –

+0

Acabo de editar mi respuesta para que quede más claro que estos cambios se realizan en tu archivo php. –

1

Al mostrar caracteres UTF8 en un sitio web, pero decirle al navegador a interpretarlos como Latin1 (o latino 2) que ven este tipo de galimatías: ß

Al mostrar Latin1 (o latino 2) caracteres en un sitio web, pero dígale al navegador que los interprete como UTF8, verá signos de interrogación.

Así que supongo que cambiaste todo a UTF8 (es decir, le dijiste al DB Engine, al servidor web y al navegador que usarías UTF8), pero en realidad no convertiste las cadenas a UTF8.

Haz lo que dice @Darkerstar. Convierta su volcado a UTF8 (Notepad ++ puede hacerlo fácilmente) e impórtelo nuevamente.

+0

Sé que esta es una vieja pregunta. Respondí por el bien de aquellos que llegan aquí con el mismo problema. –

2
mysql_query("SET NAMES UTF8"); 

añadir esta línea al final de mi "connection.php" resuelto mi problema. código completo

Mi archivo de conexión es:

<?php 
# FileName="Connection_php_mysql.htm" 
# Type="MYSQL" 
# HTTP="true" 
$hostname_test = "localhost"; 
$database_test = "test"; 
$username_test = "username"; 
$password_test = "password"; 
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_query("SET NAMES UTF8"); 
?> 

Mi intercalación de base de datos es "utf8_general_ci".

Las páginas son "dreamweaver por defecto utf8" y "forma de normalización Unicode = C (Descomposición canónica)".

+0

funciona. me salvaste, muchas gracias. –

1

No parece configurar todas las bases de datos SQL, tablas y campos en UTF-8 en MySQL y es lo suficientemente bueno. Muy molesto.

Terminamos forzar el tema a resolver los problemas de codificación:

tenido que utilizar este Cada lugar que abra la base de datos: $ db-> set_charset ("UTF-8");

Y eso funcionó. Finalmente.

Cuestiones relacionadas