kurokumi
あなたも質問に答えられます!
ウォッチリストに追加
- 状態:終了
- 回答数:2 / 0件
- 回答ポイント:140ポイント
- 登録:2005-06-29 22:18:51
- 終了:--
- カテゴリー:
コンピュータ
1
回答者:
namakoIsland
2005-06-30 02:01:37
満足!
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」のメーリングリストに答えが見つかるという経験が多々ありました。このサイトは要チェックですね。
せっかくですので、次のご解答も拝見します。
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のソース、使おうと思います。
皆さん、ありがとうございました!
おとなり質問
- PHPでセッションを実行すると Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/main/public_ht..
1 - 【MySQLでの文字化け】 CentOS4.2 mysql-server-4.1.12-3.RHEL4.1 php-4.3.9-3.8 を使用しています。 -php.ini-------- mbstring.language = Japanese mbstring...
1 - PHPの文字コードについての質問です。 php.iniの設定では、内部文字コードがEUC-JP、出力文字コードがSJISになっています。 レンタルサーバなのでphp.iniの設定..
4 - クッキーの情報を表示した際に文字化けが発生してしまいます。 PHP4を使用しております。 文字のエンコードについては、 PHPの処理にて、header(”Content-Type:..
2 - PHPでメール送信ロジックを作成しているのですがメールの件名が以下のソースで行うと38バイト目で文字化けが発生します。 $title=’【重要】株式会社テスト採用..
1
この質問・回答へのコメント
$hoge = trim(mb_convert_kana($hoge,"s"));

