gfx*_*onk 8 javascript urlencode
javascript的encodeURI函数是否有用?
据我所知,当您尝试发出HTTP请求时,您应该:
在第一种情况下,显然没有什么需要做的来请求它.注意:如果您确实想将其作为参数传递(例如?url = http ...),那么您实际上有第二种情况的实例恰好看起来像一个URI.
在第二种情况下,您应始终将unicode字符串转换为UTF-8,然后在将其添加到URI之前调用encodeURIComponent以转义所有字符.(如果您有UTF-8字节序列而不是unicode字符串,则可以跳过convert-to-utf8步骤).
假设我没有错过任何东西,我看不到encodeURI的有效用途.如果你使用它,很可能你构造了一个无效的URI,然后尝试在事后"消毒"它,这是不可能的,因为你不知道哪些字符是字面上的意图,哪些是打算转义的.
我已经看到很多反对使用escape()的建议,但是没有看到任何人阻止encodeURI.我错过了有效用途吗?
mgi*_*uca 11
我有一篇博文,详细解答了这个问题.
你应该永远使用encodeURI来构建一个URI编程,为你说的原因-你应该总是使用encodeURIComponent的各个组件,然后将它们组合成一个完整的URI.
哪里encodeURI是几乎有用的是"清洁"一个URI,按照普天的法律("在你接收的慷慨,并在你发送的保守".)如果有人给你一个完整的URI,它可能含有非法字符,例如作为空格,某些ASCII字符(如双引号)和Unicode字符.encodeURI可用于将这些非法字符转换为合法的百分比转义序列,而无需编码分隔符.同样,decodeURI可以用来"漂亮地打印"一个URI,将百分比转义的序列显示为技术上非法的裸字符.
例如,URL:
http://example.com/admin/login?name=Helen Ødegård&gender=f
Run Code Online (Sandbox Code Playgroud)
是非法的,但它仍然是完全明确的.encodeURI将其转换为有效的URI:
http://example.com/admin/login?name=Helen%20%C3%98deg%C3%A5rd&gender=f
Run Code Online (Sandbox Code Playgroud)
可能想要执行此类"URI清理"的应用程序示例是Web浏览器.当您在地址栏中键入URL时,它应该尝试将任何非法字符转换为percent-escapes,而不是仅仅出错.处理URI的软件(例如,想要获取页面上超链接中的所有URL的HTML scraper)也可能希望应用这种清理以防任何URL在技术上是非法的.
不幸的是,encodeURI有一个严重的缺陷,即它逃脱了'%'字符,使得它对于URI清理完全没用(它将双重转义任何已经有百分比转义的URI).因此我借用了Mozilla的fixedEncodeURI函数并对其进行了改进,以便正确清理URI:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%25/g, '%').replace(/%5B/g, '[').replace(/%5D/g, ']');
}
Run Code Online (Sandbox Code Playgroud)
所以你应该总是encodeURIComponent在内部使用构造URI.您应该永远不会使用encodeURI,但您可以使用我fixedEncodeURI来尝试"清理"从外部源(通常作为用户界面的一部分)提供的URI.
小智 5
encodeURI不编码以下内容:,/?:@&= + $#而encodeURIComponent确实如此.
您可能希望在encodeURIComponent上使用encodeURI,例如将URL指定为变量值,有很多原因.您希望维护URL,但编码路径,查询字符串和哈希值.使用encodeURIComponent会使URL无效.