原文链接:
当Url中存在+、空格、/、?、%、#、&、=等特殊符号时,服务器端可能无法获取到正确的参数值,或者无法正常下载文件(作为Url ), 如何? 很好? 解决办法:需要将这些字符转换成服务器可以识别的字符; 但为什么Url中的这些字符会出现问题呢? 这就不得不涉及到URL编码和解码问题。
URL编码和解码
一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。 Url 的编码格式使用 ASCII 代码,这意味着 Url 中不能包含任何非 ASCII 字符,例如希腊字母或中文。 例如,世界上有英文字母的URL,但没有希腊字母βγ.com(读作)的URL。 这是因为网络标准 RFC 1738 制定了一条硬性规则:
只有字母和数字[0-9a-zA-Z]、一些特殊符号”$-_.+!*’(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。1
这意味着如果URL中存在中文字符以及其他特殊字符,则必须对其进行编码和使用。 而+、空格、/、?、%、#、&、=这些字符(不安全),当它们直接放在Url中时,可能会在解析器中造成歧义,所以必须对其进行编码后才能使用。
解决方案
将这些字符转换为服务器可以识别的字符。 对应关系如下: