[PHP-dev 1030] Re: Fwd: [PHP-I18N] Re: ICU Extensions for PHP

Moriyoshi Koizumi moriyoshi @ at.wakwak.com
2004年 11月 3日 (水) 15:48:17 JST


小泉です。

On 2004/11/01, at 14:27, Tadashi Jokagi wrote:

>       ぢょ〜@よくきたなです.
>       i18n 的なことで日本ではかなり軽視されている iconv をちょくちょ
>     く覗いてるんですが, PHP 5 で少しメソッド増えましたよね.

はい。増やしました。XML 関連の拡張モジュールが標準で enable され、
iconv が libxml とのからみで自動的に有効にされることが推測できたので、
どこでも multibyte-aware な関数を使える環境を実現するには iconv に
アドホック的に mbstring と等価な関数を追加していくしかないという
動機からでした。

# 決して mbstring を見限ったとかそういう意図はないですよ

結局その予想通りとなり、iconv モジュールは Windows 版の公式バイナリでも
デフォルトで有効となりましたが…。

> #PHP 4だと iconv()しかなかったしいまもそう
>
>     これが mbstring レベルまで充実したらある意味発展的解散? なのかなー
>     とか思ってます.現状だと mb_send_mail() と等価のものが出来たら
>     PHP 5 だと技術的にはかなりの人は iconv に移行できるんじゃないかと.
>

個人的には iconv_substr() 等を使う事はあまりおすすめしません ^^;
というのは、mb_substr() などと比較して恐ろしく遅いためです。
(平均で 1/3 位の速度です)

<?php
$str = str_repeat('a', 10000000).'b';

$s = explode(' ', microtime());
iconv_strpos($str, 'b', 0, "UTF-8");
iconv_substr($str, 1200000, 1, "UTF-8");
$e = explode(' ', microtime());
printf("%f\n", ($e[0] - $s[0]) + ($e[1] - $s[1]));

$s = explode(' ', microtime());
mb_strpos($str, 'b', 0, "UTF-8");
mb_substr($str, 1200000, 1, "UTF-8");
$e = explode(' ', microtime());
printf("%f\n", ($e[0] - $s[0]) + ($e[1] - $s[1]));
?>

そうは言っても、iconv_mime_*() ファミリは mbstring よりはだいぶ
RFC に添っていて柔軟性の高い作りになっていますので、
iconv_mime_decode_headers() などはメールボックス解析などに有効では
ないかと (かってに) 期待しています。

あと、iconv_send_mail() について。同等の関数を追加することは可能ですが、
どの程度需要があるでしょうか。。。



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