• ベストアンサー

全角を半角に2

$clean_searchi = str_replace('、', ' ', $usersearch); $clean_search = str_replace(' ', ' ', $usersearch); $search_words = explode(' ', $clean_search); これだとエラーになります。要は全角スペースと全角句読点を半角スペースに変えてくれと指示したいのですが、どう変更したらよいでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

$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という変数:「明日は 晴れ です。」 これはお望みの結末となる。

noname#142312
質問者

お礼

あなたの回答でわかりました。もちろん、他の方の回答もあったおかげで解決に導けました。皆さんありがとう御座いました。今後もよろしくお願いします。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

ご自身で設定されている$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)
回答No.2

どこに詰まっているのかがわからないのですが、 $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を使うのでしょうか。

noname#142312
質問者

補足

二つ目のクリーンサーチの全角空欄を半角空欄にという指示は正常に動きますが一つ目の『、』全角読点を半角空欄にという指示が動かないんです。 システムはテキストボックス型検索エンジンです。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

もしそのコードをそのままかいているのでしたら 最低でも2点は直す必要があります。 >$clean_searchi = str_replace('、', ' ', $usersearch); $clean_search = str_replace('、', ' ', $usersearch); (変数の書き間違い) >$clean_search = str_replace(' ', ' ', $usersearch); $search_words = explode(' ', $clean_search); わざわざ書き換えた$clean_searchをつかっていない。 質問する前にタイプミスがないか見直すこと。

noname#142312
質問者

補足

二点目の指摘はサーチワードのとこに$clean_searchを2つ書くという事ですか?

関連するQ&A