MyMiniCity踏んでください!!

ただいま絶賛MyMiniCity参加中です.是非リンクを踏んでください!!(笑
March 14th, 2006

「mb_internal_encoding()は必須か?」に対しての疑問と検証

(Read: 17061)
Add to Hatena Bookmark

参照: akiyan.com : PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要
はてなダイアリーのよくきたはてなから移動.
mbstringで日本語を扱う上では「必須」になります.
理由はデフォルトは「ISO-8859-1」なので.
しかしこの記事にある理由は何かを間違えた別の要因による結果ではないか? と邪推するんですが.

PHPのmb_encode_mimeheader関数で文字列をエンコードするときは、直前にmb_internal_encoding関数で変換したい文字列のエンコーディングをセットしてから呼ばないとうまく動作しないもよう。


あくまで「別の要因では?」というのは邪推なのでこの記事にある現象が再現するテストコードがほしいところです.

で,試してみました.

まず素の状態.
こちらの環境

OS: Fedora Core(ほとんどrawhide) LANG=en_US.UTF-8
PHP: 5.1.2(自分でビルド)
php.ini: ほぼ素のまま(mbstringに関してはすべてコメントアウト)
文字エンコード: コンソールではとりあえずUTF-8で処理.


$ php -r 'var_dump( mb_language());var_dump( mb_internal_encoding());'
string(7) "neutral"
string(10) "ISO-8859-1"
このままmb_encode_mimeheader()を使う.


php -r 'var_dump( mb_encode_mimeheader( "ご登録いただきありがとうございます"));'
string(182) "=?UTF-8?B?w6PCgcKUw6fCmcK7w6nCjMKyw6PCgcKEw6PCgcKfw6PCgcKgw6PCgcKNw6M=?=
=?UTF-8?B?woHCgsOjwoLCisOjwoHCjMOjwoHCqMOjwoHChsOjwoHClMOjwoHClsOjwoE=?=
=?UTF-8?B?woTDo8KBwr7Do8KBwpk=?="
さて正しいかどうか.


php -r 'echo mb_encode_mimeheader( "ご登録いただきありがとうございます");' | php -r 'mb_language( "ja"); mb_internal_encoding( "UTF-8");var_dump( mb_decode_mimeheader( file_get_contents( "php://stdin")));'
string(102) "ãç»é²ããã ããããã¨ããããã¾ã"
だめ.mb_language()の設定を追加.


php -r 'mb_language( "ja");echo mb_encode_mimeheader( "ご登録いただきありがとうございます
");' | php -r 'mb_language( "ja"); mb_internal_encoding( "UTF-8");var_dump( mb_decode_mimeheader( file_get_contents(
"php://stdin")));'
string(52) "????????????????????????????????¨??????????????????"
だめ.mb_internal_encoding()の設定を追加.


php -r 'mb_language( "ja");mb_internal_encoding( "UTF-8");echo mb_encode_mimeheader( "ご
登録いただきありがとうございます");' | php -r 'mb_language( "ja"); mb_internal_encoding( "UTF-8");var_dump( mb_decode
_mimeheader( file_get_contents( "php://stdin")));'
string(51) "ご登録いただきありがとうございます"
復元できました.

ちなみにmbstringは言語毎に下記情報を持っています.

- ヘッダー用文字エンコード名
- ヘッダー用エンコード名(base64など)
- 本文用文字エンコード名

PHP 5.1.3からは上記情報もmb_get_info()で取得できるようになります.

トピックの参照元

▼最近のトピック

▼ 人気のトピック


< 過去の記事 [ 3All Categories ] 新しい記事 >
Powered by gsblog (customize)

[ POST ] [ AddLink ] [ CtlPanel ]

Subscribe blog

Bookmark blog

About me

about me

応援しています

我が息子が産まれたアクア・バースハウス(東京都世田谷区にある助産院)を応援しています.

翻訳のお仕事

腕に自信がある方,修行をしたい方はこちらをどうぞ.

2006 calendar

3月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
| Day | Month | Year |

Powered by RRDTOOL.

Archives

Categories

Links


Mail to admin

人気ブログランキングへ RSS feed meter for http://blog.poyo.jp/ Search Engine Optimization
blogpeople.netに登録!! スカウター : よくきたblog

My Google news

My Google News

Related site

ころんころん♪ べびぽよ フォト蔵Wiki
string(40) "/categ-1/year-2006/month-3/id-1142267008"