• 締切済み

キーワードの再検索で

index.phpからキーワードを書きだし、search.phpで$_GETで受け取り→エンコード→ リクエストURLまでセットし、表示されるまでは問題ないのですが、ソート順を変更した際にリクエストURLに2回、キーワードが入ってしまいます。ブラウザのアドレスバーをみると、エンコードされた値(%e3%81%bf%e3%81%8b%e3%82%93(みかんみかん)と言う感じにが2回入ってしまいます。それを、ソートを変更しても、キーワードを1回だけ入れるには、どのようにしたらいいのでしょうか? [index.php] <p><a href="search.php?keyword=みかん&sort=standard">みかん</a></p> [search.php] <?php $base = 'http://xxx.xxxxxx.co.jp/xxx/xxx'; $keyword =$_GET["keyword"]; $keyword = urlencode($keyword); $sort = $_GET["sort"]; $sort = urlencode($sort); // リクエストURL $url = $base ."&keyword=".$keyword."&sort=".$sort. ; ?> 表示順序 <form action="<?=$_SERVER["PHP_SELF"]?>" method="get"> </select> <input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES)); ?>"> <select name="sort"> <option value="satandard">新着</option> <option value="itemPrice">安い</option> <input type="submit" value="検索"> </select> よろしくお願いいたします。

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

ANo.1です >$url = $base."?Id=" .$id ."&keyword=".$keyword."&sort=".$sort. ; この時点での$urlは問題ないと思います。ただ「この$urlをどう使っているのか?」がわかりません。表示順序のソースではフォームのactionは$_SERVER["PHP_SELF"]になっていますので。 PHP_SELF自体、他の方が指摘されているように使うべきではありませんし、フォーム内にidがhiddenで含まれていないのが謎です(何のために$urlにidを含めているのか・・・)。 (蛇足) urlencodeに関しては、index.phpでの <p><a href="search.php?keyword=みかん&sort=standard">みかん</a></p> で「みかん」をそのまま書いていることを指摘しています。今現在問題なくても他の文字列にしたときに思わぬ動作になる可能性を排除できません。基本的にマルチバイト文字を入れるときにはurlencodeしておくべきでは?(当然search.phpは問題ありません)。

a4orece
質問者

補足

$urlのidですがweb apiを利用しておりますのでweb apiのidになります。(リクエストurlも本当はもっと長いのですが、質問で長くすると分からなくなりますので必要な部分だけで質問させていただいてます。) $urlは,web apiから $xlm=simplexml_load_file($url); としております(肝心なところが抜けてすいませんでした)。 商品名などを取得し、search.phpで表示しています。 PHP_SELFのところですが、このページ(search.php)でソートを変更する場合、フォームのactionはどのようにすれば、良いのでしょうか? 表示順序 <form action="<?=$_SERVER["SCRIPT_NAME"] ?>" method="get"> で大丈夫でしょうか? あとindex.phpのエンコードのところですが、search.phpと同じような感じで $keyword ="みかん"; $keyword = urlencode($keyword); <p><a href="search.php?keyword=$keyword&sort=standard">みかん</a></p> か <p><a href="search.php?keyword=%e3%81%bf%e3%81%8b%e3%82%93&sort=standard">みかん</a></p> としないとだめなのでしょうか? 長くなってすいません。よろしくお願いいたします。

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

PHP_SELFは脆弱なので最近はあまり使われないようですね SCRIPT_NAMEをつかいましょう。

a4orece
質問者

お礼

ご指摘ありがとうございます。SCRIPT_NAMEにしました。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>// リクエストURL >$url = $base ."&keyword=".$keyword."&sort=".$sort. ; この$urlをどう使っているのでしょうか?「?」がないのでanchor要素のhref属性に書いていたら動作しないのではないかと思うのですが・・・ search.phpではurlencodeしているのに、index.phpでは生のマルチバイト文字を書いているのも不思議です。

a4orece
質問者

補足

ご回答ありがとうございます。 リクエスurlが間違ってました。 // リクエストURL >$url = $base ."&keyword=".$keyword."&sort=".$sort. ; 部分ですが $id='xxxxxxxxxx'; $url = $base."?Id=" .$id ."&keyword=".$keyword."&sort=".$sort. ; search.phpではurlencodeしているのに、index.phpでは生のマルチバイト文字を書いている所ですが、その部分も若干が理解できてなく、index.phpのキーワード(みかん)をsearch.php側で$_GETしてエンコードはできないのでしょうか? index.php側でエンコードさせてから、search.phpに渡さないとダメなのでしょうか? よろしくお願いいたします。

関連するQ&A