- ベストアンサー
全角スペースを削除する方法と注意点
- PHP初心者の質問者は、テキストボックスに入力された文字の前後の全角スペースを削除する方法について尋ねています。
- 質問者は、trimファンクションを使用して全角スペースを削除しようとしましたが、文字化けの問題が発生しました。
- この問題は、PHPの設定ファイルで文字エンコーディングが正しく設定されていないために発生している可能性があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
trim関数の第二引数は、マルチバイト文字を受け付けません。 受け付けている様に見えますが、実際には、ソレをシングルバイトに展開しているイメージです。 付きまして、 <?php echo tirm($test, " "); //これを、やめて、 mb_regex_encoding("utf-8"); //これは実際にはスクリプトの先頭とかに一回だけ記述してやればOK echo mb_ereg_replace("^ *(.+?) *$", '\\1', $string); ?> といった具合にすればいけると思いますが、いかがでしょう。
その他の回答 (3)
- hogehoge78
- ベストアンサー率80% (433/539)
あぁ、そうか。 正規表現が悪すぎました。 お詫びして訂正します。すみません。 <?php echo mb_ereg_replace("^ *| *$", '', $string); ?> これでいいですね。 utf-8固定なら、yuu_xさんの仰るとおりpreg_replaceのほうが早いです。
お礼
回答有難うございます。
- yuu_x
- ベストアンサー率52% (106/202)
* が抜けた。 preg_replace('/^(?: )*|(?: )*$/u');
- yuu_x
- ベストアンサー率52% (106/202)
よく分からんけど、ひらがな、カタカナ、一部記号なら確実に化ける。他にも多数。 用件を満たす場合、trim はふさわしくない。大半がシングルバイト関数だと何度いったら。。。まぁいい。 trim の第二引数は、char list を取る。したがって 全角スペースに含まれる バイトコード、xE3、x80 が削除される。 ひらがな、カタカナ、その他記号は E3 から始まるため、先頭バイト(80 を含んでいればそれを含む)が削除され文字として意味を成さなくなる。 マルチバイトを消したければマルチバイト関数、あるいは他に代替がない場合は文字列関数で代用できないこともない。 まぁ、UTF-8 だし、正規表現辺りで $str = preg_replace('/^ | $/u', ''); // UTF-8 以外でこんなことをしてはいけない。
お礼
回答有難うございます。 無事解決できました。