URLエンコードの解説
URLエンコードについて解説します。
URLエンコードとは
URLエンコードとは一言で言うと、データがある一定の規則に従って符号化されることを言います。
インターネットエクスプローラなどのウェブブラウザからPerl/CGIプログラムにデータを送信する際には、必ずURLエンコードされます。
ウェブブラウザからURLを直接指定する場合や、 HTMLフォーム から入力データを送信するときなど、Perl/CGIプログラムに渡されるデータはすべてURLエンコード処理をほどこすのが決まりです。
ではなぜURLエンコードなどというめんどくさそうな処理が必要なのでしょうか?
実は、Perl/CGIプログラムに渡すデータが半角英数字のみの場合には、URLエンコード処理は必要ありません。
そのまま渡してOKなんです。
でも、われわれがパソコン上で使っている文字は半角英数のみではありませんよね。
日本語などの全角文字や、半角でも記号や空白文字など、さまざまな文字を使いますよね。
もしそのすべてを無条件に許可してしまったら、各データの区切りを表す文字を定義できなくなってしまいます。
なので、半角英数以外のデータについては、すべてURLエンコード処理することになっているのです。
URLエンコードのやり方
URLエンコードの必要性がわかったところで、ここでは具体的にURLエンコードの仕組みについて触れていきましょう。
文字列に対してURLエンコードを行うためには、まず、半角スペースを「+」に変換します。
次に、先ほど変換しました「+」と半角英数以外の文字を16進数に変換します。
そして、16進数であることをあらわすために2桁ごとにまとめ、頭に「%」を付けます。
これで、URLエンコードされたデータが完成しました。
とはいっても、実際にPerl/CGIプログラムにパラメータとして送信する場合にはもう一工夫必要です。
パラメータは、URLエンコードされたデータが複数あることが想定されているので、URLエンコードされた各データに対応する形でキーとなる識別名が付加されます。
識別名との境は「=」で、別のペアとの境には「&」を使うことになっています。
なので実際には「識別名=URLエンコードされたデータ&識別名=URLエンコードされたデータ…」みたいな感じになります。
まぁでもここでは、ある特定の文字列をURLエンコードする方法を解説することが目的なので、パラメータの話はまた別の機会に解説したいと思います。
ちなみに、URLエンコードされたデータを元の文字列に戻すことを、URLデコードと言います。
手順は前述しましたURLエンコードの逆なので、そんなに難しい話ではないですね。
指定文字をURLエンコード
では実際に、いろいろな文字をURLエンコードして遊んでみましょう。
「 URL Encode Checker 」を作ってみたので、いろいろな文字を簡単にURLエンコードできます。
しかも、Shift_jis、EUC、UTF-8の3種類の文字コードに対応しています。
例えば、EUCコードの文字をURLエンコードしたい場合には、以下のように操作します。
まずは、「Euc-jp」リンクをクリックします。
すると「Euc-jp URL Encode Checker」と表示されるので確認してください。
次に、入力欄にURLエンコードしたい文字または文字列を入力します。
ここでは「テスト」と入力しておきます。
入力が終わったら「Check」ボタンを押します。
すると「%A5%C6%A5%B9%A5%C8」と表示されます。
ちなみに「Clear」ボタンを押すと、リセットできます。
Shift_jisやUTF-8など他の文字コードや、記号なども試してみてください。