一尘不染

urlencode与rawurlencode?

php

如果要使用变量创建URL,则有两种选择来编码字符串。urlencode()rawurlencode()

到底有什么区别,哪个是首选?


阅读 426

收藏
2020-05-26

共1个答案

一尘不染

这将取决于您的目的。如果与其他系统的互操作性很重要,那么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那样)

返回一个字符串,其中所有非字母数字字符(-_除外)。已由百分号(%)替换,后跟两个十六进制数字和空格,并编码为加号(+)。它的编码方式与WWW表单中发布的数据的编码方式相同,即与application/ x-www-form-urlencoded媒体类型中的方式相同。这与»RFC3986编码(请参见rawurlencode())不同,因为历史原因,空格被编码为加号(+)。

这对应于RFC 1866中 application / x-www-form-urlencoded的定义。

2020-05-26