Hi!
Da Fragezeichen angezeigt werden, geht der Browser wohl davon aus, die Daten seien UTF-8 codiert; offensichtlich sind sie es aber nicht. Das Fragezeichen ist das Ersatzzeichen für Codes (Bytefolgen), die in UTF-8 ungültig sind.
Vermutlich behauptet dein Server also, UTF-8 zu liefern, gibt aber in Wirklichkeit irgendeine 1-Byte-Codierung (evtl. ISO-8859-1) aus.
Unwahrscheinlich, denn japanische Zeichen sind in ISO-8859-1 nicht enthalten. Wer auch immer ISO-8859-1 daraus macht hat schon ein Problem und kann nur Fragezeichen liefern. Ungültige UTF-8-Sequenzen werden ansonsten eigentlich mit den Fragezeichen im auf der Spitze stehenden Viereck angezeigt.
Ich vermute, dass die Kodierung auf der Verbindung zwischen MySQL und PHP nicht ausgehandelt wurde und per Default auf Latin1 steht. Das wäre meiner Meinung nach der plausibelste Grund. MySQL soll (aufgrund der Default-Einstellung) Nicht-Latin1-Zeichen nach Latin1 konvertieren, das Fragezeichen im Viereck existiert ebenfalls nicht in Latin1, also kommt das normale Fragezeichen zum Einsatz.
htmlentities helfen mir übrignes nicht weiter, die Methode habe ich bereits getestet.
Nein, weil diese Funktion -wie der Name schon sagt- nur ein paar wenige Codes umwandelt, die in HTML u.U. eine Sonderbedeutung haben. Im Wesentlichen sind das nur "<", ">", "&" und die Anführungszeichen.
htmlentities() schrieb er, du hast das gerade mit htmlspecialchars() verwechselt. Und wenn htmlentites() trotz Angabe des charset-Parameters (hat er hoffentlich bei seinem Test nicht vergessen) nicht richtig arbeiten kann, dann ist schon vorher was schief gelaufen.
Lo!