我想对我的网址进行编码,但我想将空格转换为加号。
这就是我试图做的......
var search = "Testing this here &";
encodeURIComponent(search.replace(/ /gi,"+"));
我的输出是Testing%2Bthis%2Bhere%2B%26
,但我希望它是Testing+this+here+%26
我尝试用%20
替换空格将其转换为加号,但这并不是'似乎工作。任何人都可以告诉我这是什么我在这里做错了吗?
答案 0 :(得分:36)
encodeURIComponent(search).replace(/%20/g, "+");
你在做错的是首先你将空格转换为加号,然后encodeURIComponent
将加号转换为"%2B"
。
答案 1 :(得分:0)
只需自己尝试encodeURI()
和encodeURIComponent()
...
console.log(encodeURIComponent('@#$%^&*'));
输入:@#$%^&*
。输出:%40%23%24%25%5E%26*
。那么,等等,*
怎么了?为什么不转换呢? TLDR:您实际上想要fixedEncodeURIComponent()
和fixedEncodeURI()
。长篇小说...
请勿直接使用encodeURIComponent()
。
如MDN文档所述,您应使用fixedEncodeURIComponent()
。 encodeURIComponent
不编码 以下任何一项:!',()*
。您需要使用其他功能。它不仅可以解决您的空间问题,还可以解决其他字符问题。
function fixedEncodeURIComponent(str) { return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { return '%' + c.charCodeAt(0).toString(16); }); }
引用MDN文档 encodeURIComponent()
...
为了严格遵守RFC 3986(保留!,',(,)和*),即使这些字符没有正式的URI分隔用法,也可以安全地使用以下字符:
fixedEncodeURIComponent()
答案 2 :(得分:-2)
You're using the wrong function。使用escape
代替encodeURIComponent
。
var search = "Testing this here &";
console.log(escape(search.replace(/ /gi,"+")));