如何使用JavaScript解码URL中带有空格的参数?

5

我尝试从URL中提取参数,但是一个参数含有空格,被替换为“+”,因此我提取的参数是“iphone+4”,但实际上应该是“iphone 4”,我该如何转换为第二种形式呢?decodeURIComponent在这里不起作用。

3个回答

10
function decodeParameter(param) {
   return decodeURIComponent(param.replace(/\+/g, ' '));
}

你需要在取消转义之前进行加号替换,而不是之后。否则,真正的加号将被转换为空格。 - George
实际上,字符* @ - _ + . / 不受转义/反转义的影响,这仍然会从 URL 中删除有效的+号。encodeURI/decodeURI(实际上应该用于 URL),具有更长的保留字符列表;/?:@=&# 和特殊字符 $-_.+!*'(),根据 RFC 1738 允许使用,这些字符将保持不变。从事情的样子来看,这个问题仍未解决。 - nickl-
@SimoneMelloni,我更新了我的回答。我知道escape/unescape已经弃用,但请看原始的响应日期;) - gion_13

2
"iPhone+4".replace("+"," ");  

那应该可以了吗?

7
只会替换第一次出现。 - kapa

0

这是一个模棱两可的事情,因为你不知道+到底是空格还是实际的加号。如果你也负责创建URL,你可以使用适当的URL编码函数来解决这个问题,该函数将使用%20来编码空格。如果你只是从其他地方收集它们,那么你只能假设每个+都表示一个空格 :)

你可以使用以下代码替换所有的+

your_text.replace(/\+/g," ");  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接