[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 メーリングリストの案内