我应该使用encodeURI还是encodeURIComponent来编码URL?

应使用这两种方法中的哪一种来编码URL?


这取决于你实际想要做什么。

encodeURI假定输入是一个完整的URI,可能有一些需要编码的字符。

encodeURIComponent将编码具有特殊含义的所有内容,因此可以将它用于URI的组件,例如

var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);

如果你编码的字符串放入一个URL组件(查询字符串参数),你应该调用encodeURIComponent

如果您正在编码现有的URL,请调用encodeURI


xkr.us有一个很好的讨论和例子。 引用他们的总结:

escape()方法不编码在服务器端解释为空间的+字符,也不编码在其字段中带有空格的表单。 由于这个缺点以及这个函数无法正确处理非ASCII字符的事实,您应该尽可能避免使用escape()。 最好的选择通常是encodeURIComponent()。

escape()不会编码:@ * / +

encodeURI()方法的使用比escape()更专业一点,因为它编码的是URI,而不是querystring,它是URL的一部分。 当您需要编码字符串时使用此方法,以便用于使用URI的任何资源,并且需要某些字符保持未编码。 请注意,此方法不会对'字符进行编码,因为它是URI中的有效字符。

encodeURI()不会进行编码:〜!@#$&*()=:/,;?+'

最后,在编码URI的单个组件时,大多数情况下应该使用encodeURIComponent()方法。 这种方法将对某些字符进行编码,这些字符通常会被识别为URI的特殊字符,因此可能包含许多组件。 请注意,此方法不会对'字符进行编码,因为它是URI中的有效字符。

encodeURIComponent()不会编码:〜!*()'

链接地址: http://www.djcxy.com/p/26515.html

上一篇: Should I use encodeURI or encodeURIComponent for encoding URLs?

下一篇: How to build a query string for a URL in C#?