- - PR -
(PHP)mbstring.internal_encodingに関して
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-17 16:33
ご質問させて頂きます。
どこに投稿すべきか迷いましたが、こちらに投稿します。 php.iniでmbstringの設定がありますが、 mbstring.internal_encoding の項目がコメントアウトされている場合、PHPスクリプトで実際に取得してみた所、 あるServerの除く全てのServer(PHP4.3.9/4.4.2/4.4.4)でISO-8859-1となっていました。 (PHPINFO -> mbstring.internal_encoding ISO-8859-1 no value) あるServer(PHP4.3.0)の場合、passとなってました。 (PHPINFO -> mbstring.internal_encoding none none) 1.phpのソース上でも指定していなかった場合、 どこを基準としてISO-8859-1・passが決定されているのか。 2.mbstring.internal_encodingがpassだった場合、 どの文字コードが適応されるようになるのか。 3.なぜ一番古いPHP4.3.0のみpassという設定なのか。 googleで検索してみたのですが、これだ!という情報を見つける事が出来ませんでした。 ・標準ではISO-8859-1に設定されている・・・? ・4.3.4でmbstringのライセンスが変わった(?) ・全てのVerで「--enable-mbstring」でコンパイルされている事 (4.3.4以降は、4.3.0の--enable-mbstring=allと同意・・・?) ・・・という所までは分かったのですが、ここで手詰まりとなりました。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-01-17 17:28
私も詳しくはないですし、internal_encodingは必ず設定するので調べてみたこともないですが(汗
mbstring関係の設定はPHP_INI_ALLなので、php.ini以外で設定されていないかを確認してみてください。何も設定されていない場合、phpのdefaultはiso-8859-1ですから、HTTPヘッダ(content-type)でcharsetがiso-8859-1で出てくると思います。 internal_encodingでpassというのはちょっと見た記憶がないですね。no valueと同じでcontent-typeにcharsetが付かないとは思いますが、このあたりの動作の違いはHTTPヘッダを確認すればいいと思います。 (追記) ちなみに「いつからどう変わったか」はさっぱりです。4.3.0以前を使ったことがないし、前述のように無指定で使うことがないし・・。 #役立たずですみません・・ [ メッセージ編集済み 編集者: shimix 編集日時 2007-01-17 17:33 ] | ||||||||
|
投稿日時: 2007-01-18 10:22
ご回答ありがとうございます。
> internal_encodingでpassというのはちょっと見た記憶がないですね。 自分も意識した事が無かったのですが、ここの設定が変わってしまった為に、 どうも文字化けを起こすようになってしまったようなんです。 その原因の詳細を突き止めなければならなくなってしまって・・・ _________________ | ||||||||
|
投稿日時: 2007-01-18 16:41
追記です。
> 2.mbstring.internal_encodingがpassだった場合、 > どの文字コードが適応されるようになるのか。 PHP4.3.0以外のServerに実際に下記のようにやってみたのですが、 旧Serverとほぼ同様の動きを確認する事が出来ました。 mbstring.language = Japanese mbstring.internal_encoding = pass 自分の勘違いでなければ、mbstring.internal_encoding = passにした所、 PHPスクリプトの保存形式の文字コード(?)を認識ているのか、 SJISならSJIS、EUCならEUC、UTFならUTFで読み込まれているようなのですが、 この解釈でよろしいのでしょうか? プログラマじゃないので、PHPにホント苦戦しています・・・ | ||||||||
|
投稿日時: 2007-01-18 17:48
というかinternal_encodingの指定は、スクリプトの記述が「その文字コードとの前提で」mb_convert_encodingとかmb_output_handler(mb_http_outputで別の文字コードが指定されている場合)の動作に絡むだけではないでしょうか?基本的には記述どおりで(変換されずに)出力されると思います。 なので(私は)日本語を扱うときには必ず指定するのですが、何か指定出来ない事情があるのでしょうか?(スクリプトに個別に記述するのは別として)php.iniが触れなくても.htaccessでも設定出来ますが・・ | ||||||||
|
投稿日時: 2007-01-18 20:09
なるほど。少し見えてきました。 PHPを書ける人間じゃないので、ホント助かります。
自分はサーバ管理側の立場なんですが、PHPのバージョンをUPした事で、 動かなくなった顧客PHPスクリプトが多数ありまして、その殆どが指定無しのデフォルト設定なんです。 しかも、告知にミスがあり、上手く顧客に伝わっていなかった部分があったんです。 (運営上の問題ですが・・・) で、そういう告知(影響があるという告知)も無しにUPしてしまったものだから、 「なぜ今までの設定で動かないのか、動作設定内容から1から理由を説明しろ」とのお達しがありました。 なので、四苦八苦してる所です…。 |
1