2006年12月24日

php : 文字エンコーディング関連

イブ前夜に何やってんだか。って、あ、もう12時回ったかw
ま、所帯持ちにゃかんけーねーや。w
あー。なんかいーことしてぇー(爆)


最近、自分の文字エンコードに関する知識の浅さに打ちのめされて、再度勉強中なんですが・・・。はぁ。思ったとおり、めんどーですね。

スクリプトからできるだけ制御しようと思っているんですが、結構考慮すべき関数や設定値が多い。ということで、文字エンコードに関して考慮すべきことや覚え書き。

環境
windows xp sp2
apache 2.0.53
php4 version 4.4.2



・ function_exists('mb_convert_encoding')

mb 関連が有効かどうか。
ini_get で enable-mbstring 見ても良いかなと思ったけど、enable でも、ライブラリがないとか!?あったら困るなぁと。そんなこと無いかな。他。この関数が有効で他の関数は無効など、検証してない。

・ ini_get('mbstring.encoding_translation')
・ mb_http_input()


先日の mbstring.encoding_translation 。これがONになっているだけでは、実際に変換されたのかどうかは分からない。
どうやら変換前の文字セットが mb_http_input に入っているようです。これが空の場合は送られてきたデータと内部エンコーディングが一致している。

ちなみに mb_http_input($charset) などの様に文字セット指定しているコード見た事あるけど・・・。設定できるのかなぁ。仕様書には取得しか書いてないけど。

そうそう get データだけは生データ取れる。ただ get でマルチバイトそのまま送らせるなんてことしないだろうけどw無意味だなぁ。なんで全部の生データ取れないんだろ。

・ ini_get('output_buffering')
・ ini_get('output_handler'))
・ ob_start();


output_handler は「スクリプトの全ての出力を関数にリダイレクトすることができます。」とある。おそらく output_buffering は見る必要が無く output_handler だけでいい。
ob_start はユーザ関数にリダイレクトするためのものですが、変なリダイレクトが設定されているなら、こちらに何かセットした方がよさそう。

ただ、「こちらにもリダイレクトされる」のか、「こちらにリダイレクトされるようになる」かは、試してない^^;
output_handler がスクリプト側から制御できない以上、何らかの対策はいるかも。

あと、バッファはスクリプトの最初にクリアすべきかも。バッファが残るなんて考えられない気がするが安全かな。ま、検証してない(する気も無い)のでおまじないレベルw

・ mb_language();
・ mb_internal_encoding();
・ mb_http_output();
・ ini_set('mbstring.http_input', 設定);


この辺はお約束かな。

ちなみに EUC では「美乳」テーブルなんて有名だけど。
UTF-8 はそれに類するものないのかな。Google や yahoo の UTF-8 ページは、どうもそのような対処はしていないようですけど。(goo や yahoo は、EUCのページにそういった対処がしてある。)

あと、utf-8 の html で ¥ が / になってしまうのは、font-family:'MS Pゴシック' のようにすれば防げる。こんなのはおそらく常識。
それと utf-8 へコンバートすると「〜」や「−」が化ける。これも常識。でも utf-8 を使ったことのないわたしゃ初耳だった。^^;
ただ、win? ie? のアルゴリズムの問題のようなので、ま、そんなに長い間問題になるこたないかな。

以上、まだまだあるが、とりあえずの範囲内。

※ 現状。簡易な検証しかしてないので、もし参考にするなんて方がいるなら、ちゃんとテストしましょう!
posted by HiFa at 02:07 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする
>>> スパムコメントは消してますよん。 お互い無駄な労力は避けましょう。 <<<

この記事へのコメント

コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。