- PR -

(PHP)mbstring.internal_encodingに関して

1
投稿者投稿内容
かなもの
ベテラン
会議室デビュー日: 2006/08/07
投稿数: 62
投稿日時: 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と同意・・・?)

・・・という所までは分かったのですが、ここで手詰まりとなりました。

よろしくお願いします。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 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 ]
かなもの
ベテラン
会議室デビュー日: 2006/08/07
投稿数: 62
投稿日時: 2007-01-18 10:22
ご回答ありがとうございます。

> internal_encodingでpassというのはちょっと見た記憶がないですね。
自分も意識した事が無かったのですが、ここの設定が変わってしまった為に、
どうも文字化けを起こすようになってしまったようなんです。

その原因の詳細を突き止めなければならなくなってしまって・・・
_________________
かなもの
ベテラン
会議室デビュー日: 2006/08/07
投稿数: 62
投稿日時: 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にホント苦戦しています・・・
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-18 17:48
引用:

かなものさんの書き込み (2007-01-18 16:41) より:
自分の勘違いでなければ、mbstring.internal_encoding = passにした所、
PHPスクリプトの保存形式の文字コード(?)を認識ているのか、
SJISならSJIS、EUCならEUC、UTFならUTFで読み込まれているようなのですが、
この解釈でよろしいのでしょうか?


というかinternal_encodingの指定は、スクリプトの記述が「その文字コードとの前提で」mb_convert_encodingとかmb_output_handler(mb_http_outputで別の文字コードが指定されている場合)の動作に絡むだけではないでしょうか?基本的には記述どおりで(変換されずに)出力されると思います。

なので(私は)日本語を扱うときには必ず指定するのですが、何か指定出来ない事情があるのでしょうか?(スクリプトに個別に記述するのは別として)php.iniが触れなくても.htaccessでも設定出来ますが・・
かなもの
ベテラン
会議室デビュー日: 2006/08/07
投稿数: 62
投稿日時: 2007-01-18 20:09
引用:

というかinternal_encodingの指定は、スクリプトの記述が「その文字コードとの前提で」mb_convert_encodingとかmb_output_handler(mb_http_outputで別の文字コードが指定されている場合)の動作に絡むだけではないでしょうか?基本的には記述どおりで(変換されずに)出力されると思います。


なるほど。少し見えてきました。
PHPを書ける人間じゃないので、ホント助かります。

引用:

何か指定出来ない事情があるのでしょうか?


自分はサーバ管理側の立場なんですが、PHPのバージョンをUPした事で、
動かなくなった顧客PHPスクリプトが多数ありまして、その殆どが指定無しのデフォルト設定なんです。
しかも、告知にミスがあり、上手く顧客に伝わっていなかった部分があったんです。
(運営上の問題ですが・・・)

で、そういう告知(影響があるという告知)も無しにUPしてしまったものだから、
「なぜ今までの設定で動かないのか、動作設定内容から1から理由を説明しろ」とのお達しがありました。

なので、四苦八苦してる所です…。
1

スキルアップ/キャリアアップ(JOB@IT)