如果要使用变量创建URL,则有两种选择来编码字符串。urlencode()和rawurlencode()。
urlencode()
rawurlencode()
到底有什么区别,哪个是首选?
这将取决于您的目的。如果与其他系统的互操作性很重要,那么rawurlencode似乎是可行的方法。一个例外是传统系统,该系统希望查询字符串遵循以+而不是%20编码的空格的表单编码样式(在这种情况下,您需要urlencode)。
rawurlencode 遵循PHP 5.3.0之前的RFC 1738,之后遵循RFC3986
返回一个字符串,其中除-_。〜外的所有非字母数字字符均已替换为百分号(%),后跟两个十六进制数字。这是»RFC 3986中描述的编码,用于保护文字字符不被解释为特殊的URL分隔符,并防止URL被字符转换的传输介质(例如某些电子邮件系统)所破坏。
请注意RFC 3986与1738。php 5.3之前的rawurlencode ~根据RFC 1738 编码了波浪号()。但是,从PHP 5.3开始,rawurlencode遵循RFC 3986,它不需要编码波浪号。
~
urlencode 将空格编码为加号(不像%20rawurlencode那样)
%20
返回一个字符串,其中所有非字母数字字符(-_除外)。已由百分号(%)替换,后跟两个十六进制数字和空格,并编码为加号(+)。它的编码方式与WWW表单中发布的数据的编码方式相同,即与application/ x-www-form-urlencoded媒体类型中的方式相同。这与»RFC3986编码(请参见rawurlencode())不同,因为历史原因,空格被编码为加号(+)。
这对应于RFC 1866中 application / x-www-form-urlencoded的定义。