スペースは、+
記号に URL エンコードされる場合もあれば、 にエンコードされる場合もあります%20
。その違いは何ですか。また、なぜこのようなことが起こるのでしょうか。
ベストアンサー1
+
は、URL のクエリ部分など、コンテンツ内のスペースのみを意味します。application/x-www-form-urlencoded
http://www.example.com/path/foo+bar/path?query+name=query+value
この URL では、パラメータ名にquery name
スペースが含まれ、値query value
にもスペースが含まれますが、パス内のフォルダ名は ではfoo+bar
なくです foo bar
。
%20
は、どちらのコンテキストでもスペースをエンコードする有効な方法です。したがって、URLの一部に含めるために文字列をURLエンコードする必要がある場合は、スペースを に%20
、プラス記号を に置き換えるのが常に安全です%2B
。これは、たとえばencodeURIComponent()
JavaScriptで が行うことです。残念ながら、urlコードPHPでは(urlencode のより安全です。