javascript encodeURIComponent并将空格转换为+符号

时间:2012-06-01 21:29:17

标签: javascript regex replace encodeuricomponent

我想对我的网址进行编码,但我想将空格转换为加号。

这就是我试图做的......

var search = "Testing this here &";

encodeURIComponent(search.replace(/ /gi,"+"));

我的输出是Testing%2Bthis%2Bhere%2B%26,但我希望它是Testing+this+here+%26我尝试用%20替换空格将其转换为加号,但这并不是'似乎工作。任何人都可以告诉我这是什么我在这里做错了吗?

3 个答案:

答案 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,"+")));​