[PHP-users 5572] Re: i-mode絵文字の扱いについて

TAKAHASHI Masayoshi php-users@php.gr.jp
Wed, 20 Feb 2002 12:59:31 +0900


高橋征義です。

Go Hamamura <hamamura@mvb.biglobe.ne.jp>さん:
> output_buffering = Off
> mbstring.http_input = pass
> mbstring.http_output = pass
> 
> として実行したところ、まさに
> 
> aaa2aaa4aaa6aaa8aaaae6ca
> 
> が表示されました。

うーん、やっぱりそうですか……。

> >そして「真犯人」はi-mode絵文字の(壊れた)仕様を作った人では
> >ないかと。
> 
> ですね。(--;

いちおう補足しておきます。
「&#63889;」といったHTML/XMLでの数値文字参照は、文書そのものの
エンコーディングとは関係なく、必ずISO-10646/Unicodeのコード
ポイントが使われることになっています。
http://www.w3.org/TR/html4/charset.html#h-5.3.1

そして「&#63889;」、16進なら「&#xF991;」で指定される文字は、
韓国の文字コードに由来する漢字です。
http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=F991

Unicodeの得意なIEは、i-modeの絵文字など全く気にもとめず(そりゃあ
そうだ)、正しく\uF991なる文字に展開してしまうのでしょう。
が、これをそのまま「あいうえお」と混ぜて、Shift_JISやEUC-JPで
POSTすることはできません。\uF991に相当する文字がShift_JISや
EUC-JPの中にないからです。一方、「あいうえお」は、日本語なのに
KSC5601の中にあったりします。そこで、「あいうえお」の方をKSC5601に
変換して、POSTしてしまうと思われます。

# UTF-8にする、という手もあったと思いますけど。

というわけで、「&#63889;」なんていう、すでにHTMLで別の文字として
使われている文字を絵文字に使う方が悪いと思います。

高橋征義 (TAKAHASHI Masayoshi)       Email:maki@inac.co.jp