|
■No97902 (じぇいみょん さん) に返信 > 別サイトのPHPではutf-8を使用しているとのことですが、 > MySQL側の設定に問題があったのかも知れません。
MySQL 側は、utf8mb4 でしょうか、それとも utf8 でしょうか。 BMP 文字なら違いはありませんが、U+10000 以上が含まれる場合は utf8mb4 が必要です。
> a等の英字の上に小さな〜や○が付いているようなものや、
前者は、CP1252 だと 0xE3 ; Unicode だと U+00E3 ; JIS X 0212 だと 0x2B2A です。 後者は、CP1252 だと 0xE5 ; Unicode だと U+00E5 ; JIS X 0212 だと 0x2B29 です。
※Excel VBA でシートに表示した場合 Sheet1.Range("A1").Value = ChrW(&HE3) Sheet1.Range("A2").Value = ChrW(&HE5)
> すでにDBに登録された時点で復元不可なデータがになっているのでしょうか、 たとえば
INESRT INTO TBL (FLD) VALUES ( unhex('E38182E382A2E6849BC3A3') );
SELECT FLD, hex(FLD) FROM TBL;
などとして UTF-8 文字列の入出力を確認してみては如何でしょうか?
ちなみに E3 81 82 → 平仮名「あ」 E3 82 A2 → 片仮名「ア」 E6 84 9B → 漢字「愛」 C3 A3 → チルダ付きラテン小文字「a~」 です。
データベース内の情報には問題がなく、設定上の問題で化けているのであれば、 設定の見直しで対応できる可能性があります。
データベース内の文字がそもそも破損している場合は、変換以前の問題なので 移行元のデータベースからの変換をやり直す必要があるでしょう。
もしもデータベース側が無事だけど、文字化けが解消できない場合、 Web ページ上に表示することだけが目的なら、HTML 側に対して "a〜" は「ã」か「ã」 "a○" は「å」か「å」 のように数値文字参照で記述すれば、Web ページ側の文字コードに依存せずに 表示できます。(hex 関数で変換しておいて、PHP 側で数値文字参照にするなど)
|