[PHP-dev 1170] Re: ord と chr のマルチバイト文字バージョン

Takayuki Kito hawksnow @ mail2.dnet.gr.jp
2005年 9月 28日 (水) 01:37:37 JST


鬼頭です。
返信ありがとうございます。
ちょっと気づいたことがあるので返信します。

> また、mb_系の関数を増やすべきではないと思うので
>
> chrとordが、マルチバイト対応していればいいだけだと思う。
> 仕様的に矛盾はしないでしょうから。

とのことですが、chr と ord のマルチバイト対応はかなり問題アリです。

ord のリファレンスには
「stringの先頭文字のASCII値を返します。この関数はchr()と逆の動作をします。」
とあります。
リファレンスによると、例えば
ord('h') と ord('hoge') が同じ動作をすることになるので、
本来 ord(substr($str, 0, 1)) とすべきところを
ord($str) にしているスクリプトがあるかもしれません。
もしも ord が マルチバイト対応になってしまうと、
このようなスクリプトで ord($str) が予期しない値を返す可能性があります。
また、マルチバイト文字の 1バイト目のコードを調べるために ord を使う
といった利用方法もあると思われるので、
ord が安易にマルチバイト対応になるのは良くないと思います。

chr のマルチバイト対応の問題点は
しばらく考えてみても特に思いつかなかったのですが、
やはり危険な香りがします。今までのSEの経験から感じる勘ですが。
(問題点をしいて挙げるとすれば、
 chr が返す文字列の長さが 1 であることを前提にしているスクリプトがあると
 困ったことになるかもしれません)

私の提案は別に実現しようがしまいがどちらでも良いものだったのですが
もし本当に chr と ord がマルチバイト対応してしまったら一大事なので
一応意見を言ってみます。 



PHP-dev メーリングリストの案内