≒ <a> escaping malformed URI reference

引き続き模擬ECサイト制作中。ホントに進みが遅い。これでは仕事なら給料もらえないよな。
でも、職業訓練受講中(=職探し中)の今だけできることってことで、じっくりコードを一つ一つ咀嚼しながら打ち込んでます。

で、またエラー覚え書き。今回のはエラーというかW3C先生に怒られた。↓こういうselectボックス書いたら↑の警告が出た。

<select name=”sort”>
<option value=”item_name asc”>商品名・昇順</option>
<option value=”item_name desc”>商品名・降順</option>
<option value=”sale_price asc”>価格の安い順</option>
<option value=”sale_price desc”>価格の高い順</option>
<option value=”release_date asc”>発売日の古い順</option>
<option value=”release_date desc”>発売日の新しい順</option>
</select> 

例によってW3C先生の言ってることが全く分からない。なのでこれもいつも通りグーグル先生に質問する。
日本語ではヒットなし。うーん。結構深刻なやつか?

で、W3C先生(いや、ほんとはFireFoxのVALIDATORのことです)をいじってたら「警告」の三角びっくりマークをダブルクリックしちゃって、ヘルプ画面が出てきた。
知らなかったー。親切ー!英語なんだけど、例まで出して丁寧に説明してくれてるので僕にもわかる。
結局、空白(スペース)をURI(URL)に入れちゃいけないんですって。IETFも言ってるんだって!RFC番号までわざわざ書いてくれなくてもいいですよ!

再度グーグル先生に対処法を質問。今度はいくつか出てきた。
「URIには空白は入れるな。どうしても入れる場合は空白を『%20』に置き換えろ」とのお告げ。
言われる通りselectボックスのコードを書きかえる。

今度はPHP先生に怒られる。MySQL君はそんな単語(例:item_name%20asc)は知らん!ですと。
ですよねー!ってまたまたグーグル先生に泣きつくと、魔法の呪文「rawurldecode()」を教えてくれる。
で、呪文を唱えるとMySQL君OK!そいでまたW3C先生がご立腹。もー!
PHPマニュアルの「rawurlencode()」のページ見たら下のほうに「rawurlencode()」ってある。これだな!
で、片っぱしから唱えて回って解決。

以上、僕が今毎日やっていることを実況中継風にお送りしました。こんな馬鹿なことばかりやってるから時間がかかりますということで。

ちょっと不思議なのは、SQLにデコードして渡しただけで、$_GET変数はいじってないのにW3C先生に怒られたこと。参照渡ししてるってことかな。
PHPは変数の「参照渡し/値渡し」の取り違えで結構間違えることが多い。JSとちょっと感触が違うような。例えばmysql_fetch_array()をwhileでくくる定番の使い方あるけど、
「変数の値を引っこ抜いていって、空になるまで」ってことでしょ。やっぱりPHPは面白いなー。