2007年11月 4日

[PHP-users 32797]script_encodingとinternal_encodingの違い (was Re: Re: 半角カタカナのファイルを require するとエラー)

こんにちは。

On Sat, 03 Nov 2007 08:34:45 +0900
shin-1@xxxxx wrote:

> いい機会なんで、script_encodingとinternal_encodingの違いに
> ついて、聞いてもいいですか。

自分の復習も兼ねてまとめてみました。


---
mbstring.internal_encoding

PHP: mb_internal_encoding - Manual:
http://jp.php.net/manual/ja/function.mb-internal-encoding.php
> encoding は、HTTP 入力文字エンコーディング 変換、HTTP 出力文字
> エンコーディング変換および mbstring モジュールに より定義された
> 文字列関数においてデフォルトの文字エンコーディングとして 使用されます。

たとえば、mb_convert_encoding()の第三引数のデフォルトとして
使われるものです。

# スクリプトのエンコーディングを指定するものではありません。
# つまり、mbstring.internal_encoding=SJIS としても
# SJISで記述したスクリプトを正しく扱えるようにはなりません。
# ("ソ"とか使うとエラーになります)


---
mbstring.script_encoding

# 公式ドキュメント上はみつけられませんでしたが、

スクリプトのエンコーディングを指定します。
(PHPはこのエンコーディングでスクリプトを読み込み実行します)

ただし、条件があって --enable-zend-multibyte
付きでコンパイルされたPHPでのみ使用できます。

# --enable-zend-multibyte でコンパイルされたPHPの上で、
# mbstring.internal_encoding=SJIS とすることで、
# SJISで記述したスクリプトを扱えるようになります。


---
両者の設定が異なるときですが、例えば
mbstring.script_encoding=SJIS
mbstring.internal_encoding=EUC-JP
としたとき、
・スクリプトはSJISで記述する。
・mb_convert_encoding($str, "SJIS") は
mb_convert_encoding($str, "SJIS", "EUC-JP")
と等価になります。


---
あと、スクリプト中に
declare(encoding="SJIS");
と書くことで「これ以降をSJISで記述」と指定できるようです。
(mbstring.script_encoding を動的に指定できるイメージっぽいです)

# 公式ドキュメントでまったく触れられていないようなので、
# この方法は勧められない方法なのかも。。。


--
goungoun <gounx2@xxxxx>
http://goungoun.dip.jp/app/

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

投稿者 xml-rpc : 2007年11月 4日 03:20
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/65999
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。