C# URL编码问题
使用urlencode时,soemtimes空间被编码为+;有时它被编码成%20?C# URL编码问题,c#,php,.net,html,C#,Php,.net,Html,使用urlencode时,soemtimes空间被编码为+;有时它被编码成%20? 我想知道哪一个是HTML的标准格式 HTML中没有urlencode,因此没有定义 这是一个设计和实现空间转换为什么的问题 空格是无效的URI,因此需要对其进行转换%20是对空格的URI有效编码+是空格的替代品,以提高可读性。两者都不是。查询编码是URI/URN标准的一部分,它完全取决于服务器希望得到结果的方式。一些使用%-编码,因此它们能够安全地进行解析(可读性不重要),一些使用+,一些使用-(即堆栈溢出) 编
我想知道哪一个是HTML的标准格式 HTML中没有
urlencode
,因此没有定义
这是一个设计和实现空间转换为什么的问题
空格是无效的URI,因此需要对其进行转换<代码>%20是对空格的URI有效编码
+
是空格的替代品,以提高可读性。两者都不是。查询编码是URI/URN标准的一部分,它完全取决于服务器希望得到结果的方式。一些使用%-编码,因此它们能够安全地进行解析(可读性不重要),一些使用+,一些使用-(即堆栈溢出)
编码的原因很简单,URI/URN不允许空格(和其他特殊字符)。但是,该标准没有定义如何进行编码。要求使用对任何无效字符进行编码。由于该空间在URI中无效,因此需要使用%20
对其进行编码
除此之外,它基于百分比编码,但使用+
而不是%20
对空间进行编码
PHP有两个不同的URI编码函数:
- 根据URI规范进行编码(不考虑组件上下文),以及
- 根据application/x-www-form-urlencoded进行编码
- 将空间编码为
+
,而将其编码为%20
urlencode
这与»RFC 3986编码(参见rawurlencode())不同,因为历史原因,空格被编码为加号(+)
根据rawurlencode
返回一个字符串,其中除-.~之外的所有非字母数字字符都已替换为后跟两个十六进制数字的百分号(%)。这是»中描述的编码,用于保护文字字符不被解释为特殊的URL分隔符,以及保护URL不被传输介质通过字符转换(如某些电子邮件系统)损坏
根据标准,“+”是URI中的保留字符()。URI有两个子空间:URL和URNhttp:'是URL方案的一个实现,RFC 3986保留字符的使用是特定于http的。“?”是URI中的另一个保留字符,用于标记http URL中查询字符串的开始。同样,“+”保留字符用于编码空间。百分比编码(%20)是编码空间的标准方式,可以在任何URI中使用(无论实现如何)
另请参见我想知道,如果使用-(即堆栈流),是否会给其他开发人员带来困难,而不是堆栈溢出?我相信没有库方法来处理“-”的空格。你可以轻松地使用任何库进行+或任何你喜欢的替换,你只需要注意查询的其余部分(你必须从查询字符串的其余部分删除替换字符,否则这些字符将在解码字符串时被替换);空间不能直接使用的原因是它在HTTP请求中是一个分隔符。如果使用Fiddler2查看请求:“GET/page.php?key=value HTTP/1.1”。正如您看到的,这两个空格分隔了HTTP关键字、页面名称和协议版本。