这两种方法中应该使用哪一种来编码url ?
当前回答
As a general rule use encodeURIComponent. Don't be scared of the long name thinking it's more specific in it's use, to me it's the more commonly used method. Also don't be suckered into using encodeURI because you tested it and it appears to be encoding properly, it's probably not what you meant to use and even though your simple test using "Fred" in a first name field worked, you'll find later when you use more advanced text like adding an ampersand or a hashtag it will fail. You can look at the other answers for the reasons why this is.
其他回答
如果要对字符串进行编码以放入URL组件(querystring参数),则应该调用encodeURIComponent。
如果您正在对一个现有URL进行编码,请调用encodeURI。
encodeURIComponent():假设它的参数是一个部分(比如协议、主机名、路径或查询字符串) URI的。因此,它转义了用于分隔URI部分的标点符号。
encodeURI():用于对已有url进行编码
As a general rule use encodeURIComponent. Don't be scared of the long name thinking it's more specific in it's use, to me it's the more commonly used method. Also don't be suckered into using encodeURI because you tested it and it appears to be encoding properly, it's probably not what you meant to use and even though your simple test using "Fred" in a first name field worked, you'll find later when you use more advanced text like adding an ampersand or a hashtag it will fail. You can look at the other answers for the reasons why this is.
这取决于你真正想做什么。
encodeURI假设输入是一个完整的URI,其中可能包含一些需要编码的字符。
encodeURIComponent将编码具有特殊含义的所有内容,因此您可以将它用于uri的组件,例如
var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);
以下是摘要。
Escape()不会编码@ * _ + -。/ 不要使用它。 encodeURI()不会编码A-Z A-Z 0-9;, / ?: @ & = + $ - _。! ~ * ' () # 当你的输入是一个完整的URL,如“https://searchexample.com/search?q=wiki”时使用它 encodeURIComponent()不会编码A-Z A-Z 0-9 - _。! ~ * ' () 当您的输入是完整URL的一部分时使用它 如 const queryStr = encodeURIComponent(someString)