- ベストアンサー
全角を半角に2
$clean_searchi = str_replace('、', ' ', $usersearch); $clean_search = str_replace(' ', ' ', $usersearch); $search_words = explode(' ', $clean_search); これだとエラーになります。要は全角スペースと全角句読点を半角スペースに変えてくれと指示したいのですが、どう変更したらよいでしょうか??
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
$usersearchという変数:「明日は、晴れ です。」という文字列が入っているとする $clean_searchという変数:なし 目標:$clean_searchという変数:「明日は 晴れ です。」 【おかしいプログラムをじっくり解説すると】 $clean_search = str_replace('、', ' ', $usersearch); を実行すると、 $usersearchという変数:「明日は、晴れ です。」変わらず $clean_searchという変数:「明日は 晴れ です。」、が に置き換わって入る しかしせっかくの$clean_searchを変更対象文字列にせずに $clean_search = str_replace(' ', ' ', $usersearch); と実行すると、 $usersearchという変数:「明日は、晴れ です。」変わらず $clean_searchという変数:「明日は、晴れ です。」 が に置き換わって入る つまり結果:$clean_searchという変数:「明日は、晴れ です。」 これはお望みの結末ではない。、は結局変換されていない。 【正しいプログラムをじっくり解説すると】 $clean_search = str_replace('、', ' ', $usersearch); を実行すると、 $usersearchという変数:「明日は、晴れ です。」変わらず $clean_searchという変数:「明日は 晴れ です。」、が に置き換わって入る そして今出来上がった$clean_searchを更に変換対象文字列として $clean_search = str_replace(' ', ' ', $clean_search); を実行すると、 $usersearchという変数:「明日は、晴れ です。」変わらず $clean_searchという変数:「明日は 晴れ です。」 が に置き換わって入る つまり結果:$clean_searchという変数:「明日は 晴れ です。」 これはお望みの結末となる。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
ご自身で設定されている$clean_searchが何を示しているか理解しないまま やっているということですね? >$clean_searchi = str_replace('、', ' ', $usersearch); (1) >$clean_search = str_replace(' ', ' ', $usersearch); (2) >$search_words = explode(' ', $clean_search); (3) (1)変数$usersearchを、全角読点から半角スペースにおきかえ、 変数$clean_searchiに代入 (2)変数$usersearchを、全角スペースから半角スペースにおきかえ、 変数$clean_search代入 (3)変数$clean_searchを、半角スペースで分解し配列とし、 変数$search_wordsに代入 →(1)で代入した$clean_searchiはどこにもつかわれていない →(1)が仮に$clean_searchだとすると(2)で上書きされている すなわち(2)は(1)の$clean_searchを引き継がなければ意味がない したがって#1で回答したとおりです
- notnot
- ベストアンサー率47% (4900/10358)
どこに詰まっているのかがわからないのですが、 $clean_searchi = str_replace('、', ' ', $usersearch); $clean_search = str_replace(' ', ' ', $clean_searchi); // ここの置き換え対象がおかしかった $search_words = explode(' ', $clean_search); ということなのか、マルチバイト文字で困っているのか?文字コードはなんですかね?utf-8なら $clean_search = preg_replace("/[、 ]/u"," ",$usersearch); $search_words = explode(' ', $clean_search); で、euc-jpとかならmb_ereg_replaceを使うのでしょうか。
補足
二つ目のクリーンサーチの全角空欄を半角空欄にという指示は正常に動きますが一つ目の『、』全角読点を半角空欄にという指示が動かないんです。 システムはテキストボックス型検索エンジンです。
- yambejp
- ベストアンサー率51% (3827/7415)
もしそのコードをそのままかいているのでしたら 最低でも2点は直す必要があります。 >$clean_searchi = str_replace('、', ' ', $usersearch); $clean_search = str_replace('、', ' ', $usersearch); (変数の書き間違い) >$clean_search = str_replace(' ', ' ', $usersearch); $search_words = explode(' ', $clean_search); わざわざ書き換えた$clean_searchをつかっていない。 質問する前にタイプミスがないか見直すこと。
補足
二点目の指摘はサーチワードのとこに$clean_searchを2つ書くという事ですか?
お礼
あなたの回答でわかりました。もちろん、他の方の回答もあったおかげで解決に導けました。皆さんありがとう御座いました。今後もよろしくお願いします。