みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP ソートについて

以前も、似たような質問をしたのですが少し内容が違いますのでよろしくお願いいたします。
このページ内で、ゲットしたキーワードを再ソートすると、2回エンコードされてしまいます。続けてまた、ソートすると、エンコードされた値がまたエンコードされてしまいます。、始めにゲットした値を1回だけエンコードし、ソートを変えても1回目のエンコードされた値を使うにはどのようにしたらよいのでしょうか?


$base = 'http://xxx.xxxxxx.co.jp/xxx/xxx';
$keyword =$_GET["keyword"];
$keyword = urlencode($keyword);
$sort = $_GET["sort"];
$sort = urlencode($sort);

$url = $base ."&keyword=".$keyword."&sort=".$sort. ;

<form action="<?=$_SERVER["SCRIPT_NAME"] ?>" method="get">

<input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES)); ?>">
表示順序
<select name="sort">
<option value="satandard">新着順</option>
<option value="Price">安い順</option>
<option value="-Price">高い順</option>
<input type="submit" value="検索">
</select> </form>

投稿日時 - 2012-02-03 18:30:03

QNo.7283259

困ってます

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

ちょっとプログラムの作り方を間違えています。
「urlを作るときは、urlencodeする」
「htmlを出力するときは、htmlspecialcharsする」
のが基本です。どちらもデータの出力処理のところで行うのです。
データの入力処理のところで行ってはいけません。

質問者さんのコードでは、入力段でurlencodeしており、
そのurlencodeしたものをhtmlspecialcharsするhtml出力に使っているため、おかしなことになるのです。

コードで示すならば、

---
$base = 'http://xxx.xxxxxx.co.jp/xxx/xxx';
$keyword =$_GET["keyword"];
$sort = $_GET["sort"];
$url = $base ."&keyword=".urlencode($keyword)."&sort=".urlencode($sort). ;
<form action="<?=$_SERVER["SCRIPT_NAME"] ?>" method="get">
<input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES)); ?>">
以下略
---
といった感じにしてください。。

投稿日時 - 2012-02-03 21:06:13

お礼

すばらしいです。確かに、よく考えたら入力段階urlencodeしてるのでソートを切り替える度にurlencodeされてしまいますよね。おかげさまで理想の動きになりました。勉強になりました。ありがとうございました。

投稿日時 - 2012-02-03 21:31:39

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問