[PHP-users 268] Re: PHP4.0.6 Released!

Akihiro Sagawa php-users@php.gr.jp
Tue, 26 Jun 2001 04:08:56 +0900


こんにちは。佐川です。

以下の引用部分は'KANAI Yasunori'さんの
"[PHP-users 267] Re: PHP4.0.6 Released!"からのものです。
# 引用順を前後させていただいております。
 > ただ、さいわいい、PHP 4.0.5 with jstring 1.1でもPHP 4.0.6でも、
 >i18n_*というPHP3-i18n-ja由来の書き方ができますので、
 >
 >(1)PHP 4.0.5 with jstringで、jstr_*をi18n_*で置き換えておく
 >(2)PHP 4.0.6でmbstringを有効にしてPHP 4.0.5を置き換え
 >(3)i18n_*をmb_*に徐々に置き換える(しなくてもいい?)
 >(4)新規のプログラムに関してはi18n_*ではなくmb_*を使う

 この(1),(2),(3)はかなり手間がかかりそうな気がします。(^^;;

 jstringから、mbstringになって変わったのは、jstr_*という名前がmb_*という関
数名に変更されという点だと思うので、jstr_*関数をmb_*関数でエミュレートするス
クリプトを書いてみました。
 これを、php.iniのauto_prepend_fileに指定すれば、既存のスクリプトの関数を書
き換えることなく、PHP4.0.6+mbstringの環境に移行できると思います。
# あとは、php.iniに書いた優先順位の設定を移行するだけです。

 ただ、jstr_parse_str(), jstr_convert_variables()は可変長の参照渡し引数を持
つためうまくエミュレートする関数がかけませんでした。
 まあ、同じ働きをする関数はPHP3-i18n-ja時代には存在しませんでしたから、たい
した問題にはならないと思いますが。

<?php
/* jstr_*関数を mb_*関数でエミュレートする関数
   注意: jstr_parse_strとjstr_convert_variablesはサポートされていません! */
if (extension_loaded("mbstring")) {
    foreach (array("language", "internal_encoding", "http_input",
                   "http_output", "detect_order", "substitute_character",
                   "output_handler", "preferred_mime_name", "strlen",
                   "strpos", "substr", "strcut", "strwidth", "strimwidth",
                   "convert_encoding", "detect_encoding",
                   "encode_mimeheader", "decode_mimeheader",
                   "encode_numericentity", "decode_numericentity",
                   "send_mail") as $func_name) {
        if (function_exists("mb_$func_name")) {
            eval("function jstr_$func_name() {".
                 "  \$param = func_get_args();".
                 "  return call_user_func_array(\"mb_$func_name\", \$param);".
                 "}\n");
        }
    }
}
?>
<?php
/* DEMO */
$japan_php_user_group = "日本PHPユーザー会";
// code ?
$code = jstr_detect_encoding($japan_php_user_group);
echo $code, "\n";
// substring `PHP'
echo jstr_substr($japan_php_user_group, 2, 3, $code), "\n";
// 17
echo jstr_strwidth($japan_php_user_group, $code),"\n";
// wrong param num
echo jstr_strwidth(),"\n";
?>

どうでしょうか?
皆さんのお役に立てれば幸いです。

では。

☆・・・・‥‥‥‥‥‥…‥‥‥‥‥‥・・・・
  佐川  昭宏       mailto:sagawa@sohgoh.net
                  http://pelican.sohgoh.net/
  ・・・・‥‥‥‥‥‥…‥‥‥‥‥‥・・・・☆