人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: kurokumi
●カテゴリ:コンピュータ
✍キーワード:echo EUC hoge PHP trim
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● namakoIsland
●60ポイント

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

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

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

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

◎質問者からの返答

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

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

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

-------

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

--------

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

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

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

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

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


2 ● EPP
●80ポイント

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

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

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

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

http://www.mt312.com/archives/php/000001.html

このページの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のソース、使おうと思います。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ