[PHP-users 12229] Re: bomつきutf-8 ファイルでのheader によるリダイレクト
Osamu Shigematsu
php-users@php.gr.jp
Fri, 13 Dec 2002 10:21:35 +0900
重松です。こんにちは。
> BOMをUTF-8に含みたいというわけではなく、何気なく使用したエディタでUTF-8というと
> デフォルトではBOMを含むのが普通だったので含んだ状態で作業を行っておりました。
> 今おもうと、そのエディタがおかしいんですね。
おかしくはないと思いますが、現実的な問題として、
問題:
BOM を含む UTF-8 を使う場合 header() 関数が機能しない
解決案:
(1) UTF-8N にする
(2) 他の符号化形式にする
(3) bugs.php.net を調べて、
a. 直っている版があれば、アップデートする
b. 直ってないなら、自分で直す
c. 直るまで待ち、その間は他の解決案でしのぐ
(4) あきらめる or mod_ruby とかにする
というような選択肢があり、実を取るなら (1) かなと。:-)
とりあえず、BOM のご利益としては、もしかしたら、Unicode だと
判定するときの材料となるかもしれない、ということくらいですね。
で、便乗質問になるのですが、PHP におけるエンコードの判断は、
どのようなアルゴリズムでなされているのでしょうか?
というのは、Ken Lunde 氏の「日本語情報処理」(CJVK の旧版) では、
エンコーディングの判断に固有のパターンの検出で行っていたのですが、
他のメーリングリスト (cppll) で、babel という template を見たときに、
( http://www.tietew.jp/cppll/archive/5944 )
最近の I18N 環境では、手法そのものが変わっていることに気づきました。
もし、BOM を判断材料としているならば、UTF-8 でも、BOM をつければ、
Unicode として判定するようになっており、そして、
そういう判断をするライブラリが多いようならば、
あながち UTF-8 の BOM も無駄とはいえない気もしないでもないです。
# libiconv だとか読めいいでしょうが、そこまで時間が取れていないので。
ただ、BOM がないことを前提としているコードも少なくないと思いますから、
影響はいろいろなところに及びそうですね。
すくなくとも、strlen() だとかそのあたりは当然だめでしょうし、
mb 系も対応が取れているのか、あと、正規表現だとか。
# ところで、PHP も鬼車に変わるんでしょうか? ライセンス的にも
# すっきりすると思うんですが。
> 結論としてはWEB系でUTF-8というと、UTF-8のことでなくUTF-8Nのことと
> 解釈すべきなのでしょうか。
yo-ji さんがお使いの PHP では?
--
Osamu Shigematsu <m5issige@mr.hitachi-medical.co.jp>