PHPでURLエンコードを行う

(1/1)
PHP を使ってURL エンコードを行うプログラムを作ってみることにする。

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

サンプル・プログラム

URLエンコードの利用シーン

Google 検索で "ぱふぅ家のホームページ" を検索すると、URL は "http://www.google.com/search?hl=ja&lr=lang_ja&q=%E3%81%B1%E3%81%B5%E3%81%85%E5%AE%B6%E3%81%AE%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%9A%E3%83%BC%E3%82%B8" となる。この "q=" 移行の部分が "ぱふぅ家のホームページ" を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 でラジオボタンの状態を引き継ぐ」で作成したものだ。

参考サイト

(この項おわり)
header