[PHP-users 3426] Re: 全角から半角への変換について

Osamu Shigematsu php-users@php.gr.jp
Thu, 08 Nov 2001 17:41:43 +0900


重松です。

PHP Version 3.0.15-i18n-jあ で mbereg_replace 使ってますけど?

phpinfo() でもでもってもう一度よく、configure の内容を確認してみては
どうですか?

ちなみに私のはこういう状態です。

./configure
    '--with-pgsql'
    '--enable-track-vars'
    '--with-apxs=/usr/local/apache/bin/apxs'
    '--enable-i18n'
    '--enable-mbregex'
    '--enable-versioning'
    '--enable-trans-sid'

でもって、どうしても、mbereg が使えない、ってことでしたら、強引な方法ですが、

    '^'. // 行頭から
    '\('.
    '('.
    '[EUC 1 バイト文字の 1 バイト目の範囲]'. // 1 バイトの文字
    '|'.
    '[EUC 2 バイト文字の 1 バイト目の範囲].'. // 2 バイトの文字
    ')'.
    '*'. // が 0 個以上スキップして
    '\)'.
    '\('
    'マッチさせたい文字'.
    '\)'

ってな正規表現で、マルチバイト文字の分割を防止できるのではないかと。。。
# 試してないですけど、うまくいったら教えてください。

あるいは、

$txt = preg_split ('/([ -~]+)/', $txt, -1,
             PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

とかすると、配列にいわゆる全角・半角を交互につっこんでくれますから、
全角の部分だけちまちま処理すれば、良いのではないかと。。。

王道は、いうまでもなく、mbereg() が使えない理由を調べて使えるようにすること
だと思います。

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp