ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

やっぱphp5でしょ!コミュの文字化け(PHP編)

  • mixiチェック
  • このエントリーをはてなブックマークに追加
そもそも1バイト圏で生まれたプログラムというもを
使っている以上、文字化けとは2バイトの文化圏に住んでいる以上しょうがない話です。

まずは、インストール時にconfigureにオプションが
付いてる事が前提です。(Windowsだったら関係なし)

そこで、php.iniでの設定のおさらい。
(ただし、現在文字化けが発生してないなら、
無視しても良い場合もあります。)

[mbstring]
と宣言してるあたりを見直しましょう。
出るわ出るわで、文字コード関係の設定です。
mbstring.language
mbstring.internal_encoding
mbstring.http_input
mbstring.http_output
mbstring.encoding_translation
mbstring.func_overload
mbstring.detect_order
mbstring.substitute_characte
mbstring.script_encoding
(以外と知られてないのは、mbstring.script_encodingです。PHP 4.3.0 からの新しい設定ですからね。)

そもそも、phpは2の前半あたりぐらいまでは、
日本語とかは考えられてない言語でしたが、
phpの日本人開発者の方(お名前は忘れましたが)が
n18という追加命令を作ってくれたおかげで、
対応となり、その後mbstring名前を変えました。

一応、未だにmbstring関係の命令を含め正式と言ってないので
厄介な事もありますが、正しく設定すれば、
それらも克服できる訳です。

一応、全体の環境を見直して、エンドユーザーなどに、
どの文字コードで提供するのか?を再考しましょう。
理想は、DB、ソース、出力が
一貫して同じ文字コードで行う事です。

下手にmbstring系の命令を組み合わせ
マメに処理を行ってるつもりでも、
文字化けの呪縛にハマりますので、注意しましょうね。

ちなみに一応、php6になると、
マルチバイトとUnicodeに対する
強化を行う旨のロードマップが提示されてますが、
まだまだ先の話の様です。

(次回はDBとの話でMySQLを中心に話を進めます。)

コメント(3)

環境:PHP-5.1.1 (ソースからコンパイル)
--mbstring
--enable-zend-multibyte

php.iniのmbstring環境設定

mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
 mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none


マニアックかもしれませんが、タイ語文字コードである「window-874」で保管されたMySQL v3データを、なんとかUTF-8保存したいと考えています。

現状では、FireFox等window-974の文字コードが扱えるブラウザに、出力して表示させたものをコピーしているのですが、現実的ではないと思います。

できれば、PHP内でコンバートできればよいと思っていますが、方法はあるでしょうか。

現時点でためしたのは、
mb_language("thai");
mb_convert_encoding($data, "UTF-8", "window-874");
その他
mb_internal_encodingやmbstring.http_outputなどもUTF-8とかwindow-874とかにしてみても変化無し。


そもそもmb_convert_encodingではwindow-874が未定義といわれます。ということはまだPHP側でそこまでは対応できていないということなんでしょうか。
>>kimipoohさん
window「s」-874 ではないでしょうか?
私もPHPを始めたばかりで、詳しい事は存じませんが、
googleの検索結果でも、「windows-874」のほうが件数が多いようなので、これが原因かと思い、書き込ませて頂きました。

・ウェブ window-874 の検索結果 約 843 件中 1 - 10 件目 (0.06 秒)
・ウェブ windows-874 の検索結果 約 78,900 件中 1 - 10 件目 (0.12 秒)
かなり前の話にフォローしてくださってありがとうございます。
確かに、Firefoxも含めてwindows-874が多いようです。

http://kjs.nagaokaut.ac.jp/mikami/grammatologia/Thai_code.htm

などに表として載っていました。

タイの研究者が作ったPHPのソースを見させてもらうと、UTF-8が一般化するまえのコードだったためか、MySQLデータベースにWindows-874で保存した上、コンバートなどせずにそのまま扱っているという感じでした。

さて問題は、phpでこれらの文字を扱う場合ですよね。
私的には「Windows-874 --> UTF-8」に変換したいと思っています。
PHPからはやっぱりそれは難しいんでしょうかねぇ。

まぁFirefoxで読み込んで、UTF-8なエディターにコピー&ペーストしたら変換はできますけど・・・、プログラムの変数として扱いたい場合にはいまいちですしねぇ。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

やっぱphp5でしょ! 更新情報

やっぱphp5でしょ!のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング