gerold: utf-8 und eingabefelder / mysql / 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

  1. Hallo!

    Probiere einmal folgendes aus:

    <form .... accept-charset="UTF-8">
    ....
    </form>

    mfg Manfred

  2. 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 &amp; 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

  3. 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