utf-8 und eingabefelder / mysql / php
gerold
- php
hallo zusammen
bin grade dabei meine webseiten auf unicode umzustellen. dabei bin ich folgendermaßen vorgegangen:
AddDefaultCharset in der http.conf ausgeschaltet
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> im header
kein default_charset in der php.ini
mysql variablen sind folgendermaßen eingestellt:
character set client utf8 utf8
character set connection utf8 utf8
character set database utf8 utf8
character set results utf8 utf8
character set server utf8 utf8
character set system utf8 utf8
collation connection utf8_general_ci utf8_general_ci
collation database utf8_general_ci utf8_general_ci
collation server utf8_general_ci utf8_general_ci
so. meine frage ist folgende:
wenn ich eine seite dynamisch mit php aufbaue lese ich die texte aus der datenbank aus und schreibe sie einfach ins html dokument (also ohne htmlentities o.ä.).
das klappt auch wunderbar. wenn ich allerdings den wert eines textfeldes damit befüllen möchte werden manche sonderzeichen nicht richtig dargestellt, sprich aus einem zeichen (z.B. §) werden zwei (Â$). was einerseits logisch ist, da unicode ja multibyte ist, andererseit wundert es mich das die darstellung im normalen html text funktioniert, bei eingabe-textfeldern aber nicht. um die zeichenkette in einem eingabefeld richtig darstellen zu können muß ich htmlentities(utf8_decode($string)) machen.
ein weiteres problem ist das ich zwei rechner habe mit der selben php version, der selben mysql version und beide sind genau gleich konfiguriert (siehe oben).
wenn ich mit dem phpmyadmin einen dump von einer datenbank mache und in der anderen datenbank einfüge werden manche sonderzeichen wie oben beschrieben in die tabellen eingetragen.
bin für hinweise jeglicher art dankbar.
grüße
gerold
Hallo!
Probiere einmal folgendes aus:
<form .... accept-charset="UTF-8">
....
</form>
mfg Manfred
wenn ich eine seite dynamisch mit php aufbaue lese ich die texte aus der datenbank aus und schreibe sie einfach ins html dokument (also ohne htmlentities o.ä.).
wundert mich auch bzw. frag ich mich wozu man dann überhaupt htmlentities verwenden soll, wenns auch ohne klappt ...
soll heißen ich steig da auch nicht durch...
allerdings hab ich festgestellt, dass es bei xhtml1.1 schon komplizierter wird. Wenn du eine xml-deklaration und xhtml 1.1 doctype verwendest kriegst du spätestens bei links ohne & in deinem text probleme...
das klappt auch wunderbar. wenn ich allerdings den wert eines textfeldes damit befüllen möchte werden manche sonderzeichen nicht richtig dargestellt, sprich aus einem zeichen (z.B. §) werden zwei (Â$). was einerseits logisch ist, da unicode ja multibyte ist, andererseit wundert es mich das die darstellung im normalen html text funktioniert, bei eingabe-textfeldern aber nicht. um die zeichenkette in einem eingabefeld richtig darstellen zu können muß ich htmlentities(utf8_decode($string)) machen.
und genau das selbe problem hatte ich auch kürzlich und es war zum haareraufen...
hab in einem anderen Forum zwar keine newbie-freundliche antwort erhalten, aber vielleicht helfen in deinem fall ja die attribute "accept-charset" und "encoding" des form-elements weiter...
(die ich letztendlich wieder rausgeschmissen hab, da bei mir die beim testen noch fehlende xml-deklaration das problem gelöst hat)
noch ein link zum thema, den ich nach meiner rumpfriemelei entdeckt hab (also selbst nur überflogen) vllt. nützlich:
http://php.mirrors.ilisys.com.au/manual/de/faq.html.php
mfg
hallo nochmal - danke für eure antworten, hier meine ergebnisse:
<form accept-charset="utf-8" ...
hat für mich nicht funktioniert - hat gar nichts geändert
geholfen hat folgendes:
<input type="text" value="<?php htmlspecialchars($utf8-encoded-string); ?>">
viele grüße - gerold