60pt
http://ns1.php.gr.jp/pipermail/php-users/2004-November/024121.ht...
[PHP-users 23601] trim で返す値の文字化けについて
上記URLから始まるスレッド(レス3つです)に関連話題があるようです。
$#”のEUCコードも0xA1が絡んでますので、同じ現象だと思うのですが如何でしょう?
80pt
http://php.s3.to/man/ref.mbstring.html#mbstring.overload
マルチバイト文字列関数(mbstring)
trimはマルチバイト対応関数ではないので、全角文字を第2パラメータに書くと誤動作します。
上記にマルチバイト対応関数があるのですが、残念ながらtrimのマルチバイト対応版は存在しません。
このページのmb_trimのように(このままでは第2パラメータがないので改造が必要ですが)、mb_ereg_replace()を使って自前でmb_trimを作ってやるしかないと思います。
http://www.rtpro.yamaha.co.jp/RT/docs/misc/kanji-euc.html
euc kanji code table
EUC漢字コードです。以下、全角スペースを_で表記します
_->A1A1
より、前後にある文字コードA1の文字が取り去られますので、
_$_->A1A1A1F0A1A1(trim)->F0->バグる
$->A1F0(trim)->F0->バグる
_あ$_->A1A1A4A2A1F0A1A1(trim)->A4A2A1F0->あ$
_あい_->A1A1A4A2A4A4A1A1(trim)->A4A2A4A4->あい
となります。
漢字コードテーブルはブックマークりました!
今まで質問に出したtrimを使っていて、2番目の引数の使い方を間違った場合バグることに最近になって気がつきました(汗)
2番目のURLの自作mb_trimのソース、使おうと思います。
皆さん、ありがとうございました!
ずばり、載っていましたね。
> $#”のEUCコードも0xA1が絡んでますので、同じ現象だと思うのですが如何でしょう?
おっしゃるとおりですね。
-------
trim()の第2引数は、キャラクタ(1byte)のリストです。
--------
とありますので、やっぱ駄目だったんですね。
きっぱり仕様だとあきらめます。
公式マニュアルには何も書いていなかった(はず?)のですが、残念ながらそういう仕様のようですね。
ちなみに、過去にも疑問解決のために検索していると「PHP-users」のメーリングリストに答えが見つかるという経験が多々ありました。このサイトは要チェックですね。
せっかくですので、次のご解答も拝見します。