2011-05-12 27 views
5

Tengo un problema con mi declaración de inserción mysql. Tengo un formulario que envía caracteres utf-8 correctamente al archivo de inserción (he comprobado los valores de POST).Alemán diéresis en MYSQL INSERT

Ahora cuando cuido el INSERT en mi base de datos, no hay diéresis, pero signos de interrogación.

El error debe estar justo antes de la instrucción de inserción.

Si presento contenido (ingresado manualmente) desde mi base de datos, las diéresis se muestran correctamente.

// echo $_POST["title"]; 
// outputs correctly with special chars: "Some german title with umlaute ä ö ü" 

mysql_query("INSERT INTO videos (youtube_hash, title, description, category, created) VALUES ('".mysql_real_escape_string($_POST["hash"])."', '".mysql_real_escape_string($_POST["title"])."', '".mysql_real_escape_string($_POST["desc"])."', '".mysql_real_escape_string($_POST["cat"])."', '".time()."')") or die(mysql_error()); 

// database entry looks like this: "Some german title with umlaute ? ? ?" 

espero que alguien me puede ayudar en esto :)

EDIT:

htmlentities() hizo el trabajo!

+0

¿Cuál es la codificación de su base de datos? – krtek

+3

http://www.insidemac-blog.de/bilder/2008/03/scheissencoding.jpg - Bienvenido al infierno de codificación :) – NikiC

Respuesta

1

El uso de entidades HTML no es la mejor solución para su problema. Lo ideal es que almacene datos en la base de datos y solo utilizando htmlentities() para fines de visualización. ¿Qué sucede si alguna vez desea mostrar/exportar estos datos de alguna otra forma que no sea HTML?

Recomiendo leer sobre el manejo de conjunto de caracteres en PHP/MySQL. Aquí hay un artículo que escribí recientemente: How to Avoid Character Encoding Problems in PHP

Publique nuevamente si todavía tiene problemas.

0

Intenta cambiar el conjunto de caracteres de MySQL DB de Latin1 a UNICODE.

+0

He intentado establecer la configuración de db en "utf8_unicode_ci", no funcionó ... – DonCroce

+0

Usted dice que cuando extrae el umlaute de DB manualmente, funciona. Tal vez podría ser solo un error de visualización dado por su sistema (o navegador). Intenta cambiar el conjunto de caracteres de la página HTML. – Overflowh

4

Cuando inserta sus datos de php en su base de datos mysql trate de envolver sus datos de cadena utilizando utf8_decode();

utf8_decode(string)

Como el manual php dice que esto convierte utf8 a ISO-8859-1 (latin1); Es posible que también desee experimentar con la función iconv(). Esto le da más posibilidades de elección de la codificación de entrada y de salida deseada codificación

string iconv (string $in_charset , string $out_charset , string $str) 

Si aún así no ayuda a tratar de cambiar la intercalación de la columna de la tabla de MySQL que se va a insertar en, para latin1_swedish_ci.