PHPのtrim関数で、2つ目の引数に2バイト文字は指定できませんか?

文字コードはEUC
<?php
$hoge = ’$’; #←全角のドルマークです。
$hoge = trim($hoge, ” ”); # 2番目の引数には全角のスペースを指定しています
var_dump($hoge); # trimの戻り値が文字化け?のようで、$が出力されません
echo ’全出力が文字化けでなく、もちろんこの文章は正常な出力’;
?>
ただし、1行目を
$hoge = ’あ$’;
などにすると、正常です。
元々は、trimで前後の全角スペースをとる目的でしたが、
今回の挙動に関して全角スペースの有無は全く関係なく
$hogeの値が以下の場合、
× <全角スペース><全角ドルマーク><全角スペース>
× <全角ドルマーク>
○ <全角スペース>あ<全角ドルマーク><全角スペース>
○ <全角スペース>あい<全角スペース>
(○は正常。×はバグる。)
$のほかにに#(全角)や”(全角)なども駄目ですので、
恐らく文字コードの何バイト目が云々の問題だと予想しますが、そもそもtrimは2バイト文字は
駄目でしたか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/29 22:18:51
  • 終了:--

回答(2件)

id:namakoIsland No.1

namakoIsland回答回数319ベストアンサー獲得回数02005/06/30 02:01:37

ポイント60pt

http://ns1.php.gr.jp/pipermail/php-users/2004-November/024121.ht...

[PHP-users 23601] trim で返す値の文字化けについて

上記URLから始まるスレッド(レス3つです)に関連話題があるようです。

$#”のEUCコードも0xA1が絡んでますので、同じ現象だと思うのですが如何でしょう?

id:kurokumi

ずばり、載っていましたね。

> $#”のEUCコードも0xA1が絡んでますので、同じ現象だと思うのですが如何でしょう?

おっしゃるとおりですね。

-------

trim()の第2引数は、キャラクタ(1byte)のリストです。

--------

とありますので、やっぱ駄目だったんですね。

きっぱり仕様だとあきらめます。

公式マニュアルには何も書いていなかった(はず?)のですが、残念ながらそういう仕様のようですね。

ちなみに、過去にも疑問解決のために検索していると「PHP-users」のメーリングリストに答えが見つかるという経験が多々ありました。このサイトは要チェックですね。

せっかくですので、次のご解答も拝見します。

2005/06/30 15:15:51
id:EPP No.2

EPP回答回数12ベストアンサー獲得回数02005/06/30 09:41:16

ポイント80pt

http://php.s3.to/man/ref.mbstring.html#mbstring.overload

マルチバイト文字列関数(mbstring)

trimはマルチバイト対応関数ではないので、全角文字を第2パラメータに書くと誤動作します。

上記にマルチバイト対応関数があるのですが、残念ながらtrimのマルチバイト対応版は存在しません。

このページのmb_trimのように(このままでは第2パラメータがないので改造が必要ですが)、mb_ereg_replace()を使って自前でmb_trimを作ってやるしかないと思います。

EUC漢字コードです。以下、全角スペースを_で表記します


_->A1A1

より、前後にある文字コードA1の文字が取り去られますので、


_$_->A1A1A1F0A1A1(trim)->F0->バグる

$->A1F0(trim)->F0->バグる

_あ$_->A1A1A4A2A1F0A1A1(trim)->A4A2A1F0->あ$

_あい_->A1A1A4A2A4A4A1A1(trim)->A4A2A4A4->あい


となります。

id:kurokumi

漢字コードテーブルはブックマークりました!

今まで質問に出したtrimを使っていて、2番目の引数の使い方を間違った場合バグることに最近になって気がつきました(汗)

2番目のURLの自作mb_trimのソース、使おうと思います。

皆さん、ありがとうございました!

2005/06/30 15:32:03

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません