[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/
・・・・‥‥‥‥‥‥…‥‥‥‥‥‥・・・・☆