[解決済み】urlencodeとrawurlencodeの比較?
質問
変数を使用してURLを作成したい場合、文字列をエンコードするために2つの選択肢があります。
urlencode()
と
rawurlencode()
.
具体的にはどのような違いがあり、どちらが好ましいのでしょうか?
どのように解決するのですか?
目的によって異なります。他のシステムとの相互運用性が重要な場合は、rawurlencodeが適していると思われます。例外は、クエリー文字列が%20の代わりに+としてエンコードされるフォームエンコードスタイルに従うことを期待するレガシーシステムです(この場合、urlencodeが必要です)。
生urlencode は、PHP 5.3.0 以前の RFC 1738 とそれ以降の RFC 3986 に従っています( http://us2.php.net/manual/en/function.rawurlencode.php )
英数字以外の文字(-_.~を除く)をパーセント記号とそれに続く2桁の16進数で置き換えた文字列を返します。これは " RFC 3986 で説明されているエンコーディングで、リテラル文字が特殊な URL 区切り文字として解釈されないようにしたり、 URL が (一部のメールシステムなどの) 文字変換を行う伝送メディアで乱雑に扱われないようにしたりするためのものです。
RFC 3986 と 1738 の比較に関する注意点 php 5.3 より前の rawurlencode では、チルダ文字 (
~
)は、RFC1738に従っています。しかし、PHP 5.3 以降、rawurlencode は RFC 3986 に従っており、チルダ文字のエンコーディングは必要ありません。
urlencode
は、スペースをプラス記号としてエンコードします(not as
%20
で行われるように)(
http://us2.php.net/manual/en/function.urlencode.php
)
を除くすべての非英数字をパーセント(%)記号とプラス(+)記号としてエンコードされた2桁の16進数およびスペースに置き換えた文字列を返します。WWW フォームからの投稿データがエンコードされるのと同じ方法、つまり application/x-www-form-urlencoded メディアタイプと同じ方法でエンコードされます。これは " RFC 3986 エンコーディング (rawurlencode() 参照) とは異なり、歴史的な理由により、スペースはプラス (+) 記号としてエンコードされます。
の application/x-www-form-urlencoded の定義に相当します。 RFC1866 .
追加の読み物です。
また、以下のサイトでの議論もご覧ください。 http://bytes.com/groups/php/5624-urlencode-vs-rawurlencode .
また RFC 2396 は一見の価値があります。RFC2396は、有効なURIの構文を定義しています。私たちが関心を持つのは、3.4 Query Componentの部分です。
クエリコンポーネント内では、文字
";", "/", "?", ":", "@",
が予約されています。
"&", "=", "+", ",", and "$"
ご覧の通り
+
はクエリ文字列の予約文字であるため、RFC 3986 に従って (rawurlencode のように) エンコードされる必要があります。
関連
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み] Pythonでクエリ文字列をurlencodeする方法は?
-
[解決済み] curlコマンドのデータをurlエンコードするには?
-
[解決済み] C#によるURLエンコード
-
[解決済み] JavaによるHTTP URLアドレスのエンコード
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み】PHP|define() vs. const.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】 libapache2-mod-php7 パッケージが見つからない。
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] スペースはいつプラス(+)または%20にエンコードされるべきですか?重複