[PHP-users 32796] Re: 半角カタカナのファイルを require するとエラー
Tomoyuki Asakawa
tom @ asakawa.ne.jp
2007年 11月 3日 (土) 19:52:05 JST
あさかわ
>> はい、スクリプトエンコーディングですから。
>
> 実は、私も前から疑問に思ってたんです。
> いい機会なんで、script_encodingとinternal_encoding
> の違いに
> ついて、聞いてもいいですか。
>
> 公式のドキュメント見てもscript_encodingについてはPHP4.3.0
> から追加されたとしか説明がないし、どういうものか知りません
> でした。
>
> PHP4.0の知識で「ソースはSJISで書いたらいけない」とい
> う程度しか
> 認識ありませんでした。どういう目的でinternal_encoding
> と別に
> 追加されたものなのでしょうか。
現在は、ソースはSJISで書いてもいいです。
突然昔の記憶がよみがえり。古いMLを探してみました。
このスレッドに、片鱗が見えます。
http://ml.php.gr.jp/pipermail/php-dev/2003-May/thread.html#761
で、このスレッドで、DOQNな私ですが。
藤本さんの説明で
script_encoding = SJIS
internal_encoding=SJIS
の場合は、スクリプトの動作は、問題ない事がわかります。
なので、internal_encoding=SJISは、使えないというのは撤
回します。
(上記MLの話が記憶から飛んでいました、すいません)
今回の場合、script_encoding =autoな為に
半角カナを、EUCと誤認してエラーになっていると思います。
> internal_encodingとscript_encodingに違う値を指定する
> ことって
> 実際問題としてありえるんでしょうか?
前述の通り、いつもやっています。
理由は、PostgreSQLを、EUCで動作させているので
(PostgreSQLにSJISが指定できないから)
internal_encoding=EUC
ソースは、SJISで書いてるので
script_encoding = SJIS
としています。
>
> もし違う値が設定されてたら、変数にセットした日本語文字列は必ず
> mb_convert_encodingでinternal_encodingに変換して使う
> ことになる
> のでしょうか。
それは、script_encodingから、internal_encodingに
自動で変換してくれますので変数は意識する必要ありません。
しかし、テキストファイルの読み書きや、DBとのやり取り。
の場合には、internal_encodingからの、変換が必要な事があ
ります。
PHP-users メーリングリストの案内