サンプル・プログラム
URLエンコードの利用シーン
Yahoo!検索では "http://search.yahoo.co.jp/bin/search?yuragi=on&p=%A4%D1%A4%D5%A4%A5%B2%C8%A4%CE%A5%DB%A1%BC%A5%E0%A5%DA%A1%BC%A5%B8" となる。
また、各種WebAPI のパラメータとしても使われる。
たとえば、Yahoo!JAPAN の「関連検索ワード」を利用するときには、パラメータ query をURL エンコードする。
日本語のファイル名を扱うことができないようなシステムでは、URL エンコード結果をファイル名にすることが多い。
たとえば Wikipedia のページ "http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89" は「エンコード」の開設をしているが、"wiki/" 以下の部分は「エンコード」をURL エンコードした結果の文字列である。
このように、日本語で Web を利用する際には、あらゆる場面でURL エンコードに出会う。
サンプル・プログラムの解説
0044: //パラメータの準備
0045: $sour = isset($_POST['sour']) ? $_POST['sour'] : '';
0046: $sour = trim($sour); //行頭・行末の空白を除く
0047: $sour = mb_convert_encoding($sour, $InternalEncoding, 'auto');
0048: $dest = isset($_POST['dest']) ? $_POST['dest'] : '';
0049: $dest = mb_convert_encoding($dest, $InternalEncoding, 'auto');
0050: if (! isset($_POST['encode'])) $tbl_encodes[$InternalEncoding] = 'checked';
0051: $val = mb_convert_encoding($_POST['encode'], $InternalEncoding, 'auto');
0052: $tbl_encodes[$val] = 'checked';
0053:
0054: //コード変換
0055: $str = mb_convert_encoding($sour, $val, $InternalEncoding);
0056: //URLエンコード
0057: $dest = urlencode($str);
0058: $sour = htmlspecialchars($sour); //特殊文字をエスケープする
変換したい文字列を $_POST['sour'] で受け取り、これを組み込み関数 urlencode によってURL エンコードしている。
ここで気をつけなければならないことがある。URL エンコードする文字コードが何かということである。
"ぱふぅ家" を UTF-8 で URL エンコードすると "%E3%81%B1%E3%81%B5%E3%81%85%E5%AE%B6" となるが、EUC-JP なら "%A4%D1%A4%D5%A4%A5%B2%C8" となる。
いま、大部分の Web サービスは UTF-8 を指定しているが、中には EUC-JP やシフト JIS が残っているところもある。
そこで、事前に組み込み関数 mb_convert_encoding によって文字コードを指定のものに変換しておく。
なお、ユーザー関数 explodeArray は、「PHP でラジオボタンの状態を引き継ぐ」で作成したものだ。
参考サイト
- 文字コードの話(ぱふぅ家のホームページ)

URL エンコードは、Google 検索や各種WebAPI のパラメータだけでなく、Wikipedia のファイル名としても使われている。日本語を使って Web サービスを利用する場合には覚えておく必要があるキーワードだ。