• ベストアンサー

全角を半角に2

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

noname#142312
noname#142312
  • PHP
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
回答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% (4848/10262)
回答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

  • 全角スペースを半角スペースに変換

    $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; 上記のソースを記述し、htmlのテキストボックス(usersearch)内にある全角スペースを半角にしようと試みるのですが、上手く変換されません。何か解決策はないでしょうか?? 全体的にはこのようなソースです。 $search_query = "select * from kensaku2"; $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; $clean_search = str_replace(',', ' ', $usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 半角と全角。

    またしてもWORD2000の機能で悩んでいます。 プロパティで全角指示を与えているのに、括弧の前の句読点が半角になってしまいます。なぜでしょう?

  • エスケープでエラーが出ます。

    $search_query = "select SQL_CALC_FOUND_ROWS * from king"; $usersearch= htmlentities($_GET['usersearch']); $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; while($row = mysql_fetch_array($result) 2行目のhtmlentities()を外すと正常に動作しますが、この関数を付けるとエラーが出てしまいます。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ドメイン 76です。ちなみに76は、ここに提示している最後のwhile~です、よろしくお願いします。

    • 締切済み
    • PHP
  • 【PHP】半角「\」を全角「¥」に変換したい(2)

    同じ過去の質問を見つけたのですが、実行してみたところできなかったので相談させてください。【過去質問】:http://oshiete1.goo.ne.jp/qa3065958.html PHP Version 4.4.6、文字コードはshift-JISです。 アンケートフォームで入力された値を受け取り、半角「\」があれば全角「¥」に置換したいのですが、上手くいきません。 試したのは下記の方法です。 [1]  $str = preg_replace("\\", "¥", $str); [2]  $str = mb_ereg_replace("\\\\", '¥', $str); [3]  $str = preg_replace("/\\\\/", '¥', $str); 同じ質問をされている方は文字コードが「UTF-8」で上記の[2][3]で上手くいっているようなので、文字コードを変更すればいいのかもしれませんが、現在あるフォームを修正しているので、できればshift-JISでしたい・・・と模索中です。 また、サイトの性質上「○○円の~」というようなメッセージが多いので、¥を削除することはできるだけ避けたいです。 ご指導をお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP】半角「\」を全角「¥」に変換したい

    PHP初心者です。 バージョンは4.4.4 ファーストサーバ 文字コードはUTF-8 です。 マルチバイト文字の中の半角「\」をそれ以外の文字に変換したいのですがどうすればできるでしょうか? (1)$str = mb_ereg_replace("\\", '¥', $str); (2)$str = preg_replace("\\", '¥', $str); (1)も(2)もエラーとなり変換できません。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 半角全角スペースの削除(先頭&末尾)

    やまとです。 ある文字列の先頭と末尾のスペースを取り除きたいのですが、 どのようにしたら良いでしょうか? 事前に試した事が2つあります。 1.trim を使用する。  $aiueo = " あいうえ お "; $aiueo = trim($aiueo));  とすると、スペースが削除されます。  しかし、これでは全角のスペースが削除されないようですね。 2.置換する。  $aiueo = " あいうえ お ";  $aiueo = str_replace( ' ', '', $aiueo );  とすると、全角のスペースが削除されます。  しかし、文字列の先頭と、末尾以外の全角スペースも削除されてしまう  ようですね。 では、文字列の先頭と末尾の半角スペースと全角スペースを削除したい場合は どのようにしたら良いでしょうか? ご教授願います。

    • ベストアンサー
    • PHP
  • 末尾の全角スペースの削除

    SQL Server 2008環境です。 文字列の末尾の空白を一括して削除したくて、以下のようなクエリを書きました。 UPDATE TEST_TABLE SET NAME = REPLACE(RTRIM(REPLACE(StoreBranchName, ' ', ' ')), ' ', ' ') 全角スペースを一度半角スペースにして、RTRIMをかけた後、最後に 半角スペースを全角に直すというものです。 しかし、これだと、元々半角スペースが入っていた場合、そっちまで全角スペースに なってしまうため悩んでおります。 うまいやり方を教えていただけないでしょうか。 宜しくお願いします。

  • 全角から半角に変換する

    Javaで、文字列の中に全角があれば単純に半角に変換するような処理をしたいです。具体的には、次のような文字列があった場合、以下のように変換したいです。 <変更前> あ亜アアaaAA11%% <変更後> ア亜アアaaAA11%% つまり、以下のようにしたいです ・全角ひらがな→半角カタカナ ・漢字:何もしない ・全角カタカナ→半角カタカナ ・半角カタカナ:何もしない ・半角アルファベット→何もしない ・全角アルファベット→半角アルファベット ・半角数字→何もしない ・全角数字→半角数字 ・半角記号→何もしない ・全角記号→半角記号 上記のように書くと複雑に見えますが、要は基本的に半角に相当する文字がある場合には半角にしたいだけです。Googleで探してみましたが、Javaで標準で上記のような処理を出来るようなメソッドを見つけることができませんでした。このようなメソッドは標準で存在しますでしょうか? 自作する場合、いくつかアプローチがあると考えられますが、最もパフォーマンスを速くしたい場合にはどのような作り方にした方がよいでしょうか。お手数ですが、宜しくお願いします。 <追伸> プレビューで見たら、半角の文字が全角に自動的に変換されてしまいました。。 例文からはわかりにくいかも知れませんが、宜しくお願いします。。

    • ベストアンサー
    • Java
  • Javascript 全角カナ+半角スペース+全角スペースの正規表現について

    初歩的な質問をしてすみません。 一応、自分でも試行錯誤で if (str.match(/[^ア-ンー\- ]+/g)){ alert("フリガナの項目を「全角カタカナ」のみで入力して下さい。"); } という条件を作ってみたのですが、半角スペースを入力したらTrueとなってしまいます。 全角カナ+半角スペース+全角スペース以外はFalseとなる正規表現を教えていただけないでしょうか。 以上、よろしくお願いします。

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl