PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sonderzeichen werden falsch in mysql db geschrieben trotz UTF 8



iberican
12.02.08, 16:48
Hi,
ich habe seit mehreren Monaten schon ein Problem mit der korrekten Verarbeitung von Sonderzeichen. Ich parse diverse rss feeds, die oftmals Sonderzeichen enthalten (von japanisch bis spanisch alles dabei).
Zum Parsen verwende ich simplepie (simplepie.org), habe aber auch schon magpierss als Alternative verwendet. Die Daten werden als xml geladen und mittels php in eine mysql db geschrieben, doch dort kommen sie nicht korrekt an wie man sieht
Covers: ¡¡¿Qué hace
korrekt wäre es
Covers: ¡¡¿Qué hace

Dazu muss ich sagen, dass sie bereits in dem xml file nicht korrekt sind, das kann aber daran liegen, dass ich mir utf8 nicht in der shell und in meinem anzeigen lassen kann?
Anscheinend liegt das Problem schon beim Transfer?

Geparsed wird nicht im browser sondern über cli in der bash.
mysql sieht bei mir ganz vernünftig aus glaube ich - myadmin gibt mir folgendes aus

character set client utf8
character set connection utf8
character set database utf8
character set filesystem binary
character set results utf8
character set server utf8
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_unicode_ci
(Globaler Wert) utf8_general_ci
collation database utf8_general_ci
collation server utf8_general_ci

auch in der php.ini des cli, die ich vermutlich verwende habe ich auf utf umgestellt.
php -f phpinfo.php | grep .ini gibt folgendes aus

Configuration File (php.ini) Path => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d
additional .ini files parsed => /etc/php5/cli/conf.d/curl.ini,

nun ich bin ich mir mittlerweile recht sicher, dass alles auf utf 8 umgestellt ist und trotzdem bekomme ich nicht korrekt dargestellte Zeichen.

Ich freue mich wie immer über eure Ratschläge

marce
12.02.08, 17:33
Welches System nutzt Du denn? Was sagt denn ein file auf das xml?

Vermutlich liegt das Problem in der Bash - die UTF8-Unterstützung so mancher Kommandozeilentools lässt leider noch etwas zu wünschen übrig.

iberican
12.02.08, 17:43
ich benutze debian, php5, mysql5

file 1.xml: "\011XML

das mit der shell habe ich auch vermutet, doch eigentlich wird ja nichts in der shell gemacht, ausser der aufruf des phpskripts welches dann parsed...

ich habe mir nun mal einen utf 8 editor geholt und das file heruntergeladen, dort wird es korrekt dargestellt.
irgendwas muss beim auslesen schief gehen

iberican
12.02.08, 18:06
auweia , ich befürchte ich habe es
Kollation ist utf8_bin
und nun auf utf8_unicode_ci
damit schaut es schon besser aus.

iberican
14.02.08, 13:51
hi,
leider habe ich mich zu früh gefreut und das Problem quält mich weiter.
Habe nun alles auf general_ci umgestellt und es schaut schon besser aus,
doch das einfach Anführungszeichen " ' " wird nach wie vor mit einem ? dargestellt.
Umlaute und all das sind korrekt wie man sehen kann:
Video: ?Mega Man II? - Johan Agebjörn
Für den insert verwende ich mysql_real_escape_string(), aber das hilft trotzdem nicht.



Danke für Tipps
Gruß

marce
14.02.08, 20:39
Hast Du bei php mbstring mit drin?

iberican
14.02.08, 20:51
nein , hatte mal mb_convert_encoding versucht, hat aber nichts bezweckt.

iberican
20.02.08, 20:31
hi @ all
nach vielen Anläufen konnte ich das Problem nun lösen.
In meinem php script habe ich folgende Ergänzung gemacht

mysql_query(SET NAMES utf8)
danach hat das ganze funktioniert. Das fand ich höchst verwunderlich, denn mein client charset war laut phpmyadmin bereits auf utf 8, als auch alles andere .
Dann habe ich in der my.cnf folgende Ergänzungen vorgenommen



[client]
default-character-set=utf8

[mysqld]
init-connect = 'SET NAMES utf8'
skip-character-set-client-handshake


Und siehe da es funktioniert..