2A.3 URL関数
| 構文 | 説明 |
|---|---|
string urlencode ( string str ) string urldecode ( string str ) |
urlencode() では、ハイフン( - )、アンダースコア( _ )、 ピリオド( . )を除くすべての非英数文字が、 パーセント記号( % )に続く二桁の数字で置き換えられ、 空白はプラス記号( + )にエンコードされます。 urlencode() のエンコード方法は、URLを規定した RFC1738 のエンコード方法とは異なるものですが、 歴史的な理由により、空白は+記号にエンコードされます。 urlencode() はURLの問い合わせ部分に使用する文字列のエンコードを行います。 用例:
echo '<a href="sample.php?name=', urlencode($name), '">'; urldecode() は urlencode() の逆変換です。 |
string rawurlencode ( string str ) string rawurldecode ( string str ) |
rawurlencode() では、ハイフン( - )、アンダースコア( _ )、 ピリオド( . ) を除くすべての非英数文字が、 パーセント記号( % )に続く二桁の数字で置き換えられます。 rawurlencode()のエンコード方法、URLを規定した RFC1738 で定められたエンコーディング方法と同じです。 rawurldecode() は rawurlencode() の逆変換です。 |
string base64_encode ( string data ) string base64_decode ( string encoded_data ) |
base64_encode()は、data をbase64方式でエンコードして返します。 base64_decode() は base64_encode() の逆変換です。 |
補足:URLエンコード
HTTPのGETメソッドによりデータを渡す場合、 データ中に区切り文字( & と = )があると問題が発生します。 データが data=abc という場合は 、 data は abc というデータですが 、 data=a=c と記述された場合は 、 data は a=c と解釈できないからです。 この問題を解決するためにURLエンコードという手法を使い、データ部を特殊文字に置き換える事によって解決します。 これががURLエンコードです。
補足:base64エンコード
1993年に電子メールを拡張するための MIME( Multipurpose Internet Mail Extension ) 規格が制定されたましたが、 バイナリファイルを送信するための手順が決まっているにもかかわらす8bitコードを送る事は許されていませんでした。 そこでバイナリコードを7bitコードに変換して送信する方法が考案されました。これがbase64です。
base64は、変換元となるバイナリファイルから順に3byteずつ取り出し、その3byte(24bit)を上位から6bitずつに分け、 その6bitデータを変換テーブルに従って変換し、結果として4byteのデータを作ります。 取り出す元データが3byteに満たなくなった場合、変換に最低必要な6ビットを確保するために足りないビットを0で埋めます。 そして結果が4byteに満たない分だけイコール記号( = )で補います。 従って、変換後のサイズは必ず4の倍数になります。base64の変換テーブルは以下のとおりです。
| 変換前 | 変換後 |
|---|---|
| 0〜25 | 'A'〜'Z' |
| 26〜51 | 'a'〜'z' |
| 52〜61 | '0'〜'9' |
| 62 | '+' |
| 63 | '/' |
'Hello' →'SGVsbG8='
| H (0x48) | e (0x65) | l (0x6c) | l (0x6c) | o (0x6f) | |||
| 01001000 | 01100101 | 01101100 | 01101100 | 01101111 | |||
| 010010 | 000110 | 010101 | 101100 | 011011 | 000110 | 111100 | |
| S | G | V | s | b | G | 8 | = |
