PHPでURLエンコードを行う

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

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

(2021年7月10日)PHP8対応,リファラ・チェック追加,大幅改訂

目次

サンプル・プログラムの実行例

PHPでURLエンコードを行う

サンプル・プログラム

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

Google検索で "ぱふぅ家のホームページ" を検索すると、URLは "https://www.google.com/search?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&ie=UTF-8" となる。この "q=" 移行の部分が "ぱふぅ家のホームページ" をURLエンコードした結果の文字列である。
Yahoo!検索では "https://search.yahoo.co.jp/search?p=%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&ei=UTF-8" となる。

また、マッシュアップで呼び出す各種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エンコードに出会う。

サンプル・プログラムの解説

0242: // メイン・プログラム =======================================================
0243: $enc   = getParam('encode', TRUEDEF_ENCODE);
0244: $sour  = getParam('sour',   TRUEDEF_SOUR);
0245: $sour  = trim($sour);                            //先頭・末尾の空白を除く
0246: $dest  = getParam('dest',   TRUE, '');
0247: 
0248: //リセット
0249: if (isButton('reset')) {
0250:     $enc  = DEF_ENCODE;
0251:     $sour = DEF_SOUR;
0252:     $dest = '';
0253: }
0254: 
0255: //コード変換
0256: $str = mb_convert_encoding($sour$encINTERNAL_ENCODING);
0257: //URLエンコード
0258: $dest = urlencode($str);
0259: //XSS対策
0260: $sour  = htmlentities($sour);
0261: 
0262: //表示HTML作成
0263: $HtmlBody = makeCommonBody($enc$sour$dest);
0264: 
0265: //表示処理
0266: echo $HtmlHeader;
0267: echo $HtmlBody;
0268: echo $HtmlFooter;
0269: 
0270: /*
0271: ** バージョンアップ履歴 ===================================================
0272:  *
0273:  * @version  2.0  2021/07/07  PHP8対応,リファラ・チェック追加,大幅改訂
0274:  * @version  1.0  2009/06/17
0275: */
0276: ?>

プログラムの流れは簡単である。
変換したいテキストをを組み込み関数  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  によって文字コードを指定のものに変換しておく。

参考サイト

(この項おわり)
header