栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么encodeURIComponent不编码单引号/撇号?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么encodeURIComponent不编码单引号/撇号?

enpreURIComponent
转义除以下字符外的所有字符:

字母,十进制数字-_。!〜*’()

如果您希望使用兼容的编码与RFC 3986(其中储备

!
'
(
)
,和
*
),您可以使用:

function rfc3986EnpreURIComponent (str) {      return enpreURIComponent(str).replace(/[!'()*]/g, escape);  }

您可以在MDN上获取更多信息。

更新:

要回答您的问题,关于为什么

'
上面提到的其他字符以及为什么不是由enpreURIComponent编码的,简短的回答是它们只需要在某些URI方案中进行编码,对它们进行编码的决定取决于您使用的方案。

引用RFC 3986:

产生URI的应用程序应该对与中的字符相对应的数据八位字节进行百分比编码,

reservedset
除非URI方案明确允许这些字符表示该组件中的数据。如果在URI组件中找到了保留字符,并且该字符没有定界角色,则必须将其解释为代表与该字符的US-
ASCII编码相对应的数据八位位组。

其中“保留集”定义为

reserved    = gen-delims / sub-delimsgen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

撇号在

sub-delims
组中。换句话说,如果您确定使用的应用程序会知道如何处理这些字符,则必须特别避免对这些字符进行编码:例如,如果您错误地编码
?
并且
&
它们将不再分隔查询部分。历史上也有建议使用
;
和分隔的路径段参数
,
(并没有被广泛采用),因此仍然允许使用这些字符。并不是说撇号
unreserved
在URI数据中是“免费使用”(即),而是假定它在URI上下文中将具有某些特殊含义,例如
segment

segment       = *pcharpchar         = unreserved / pct-enpred / sub-delims / ":" / "@"unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号