原始问题:
我从Java servlet向Web客户端发送带有Unicode字符串(许多不同语言和md5哈希)的JSON字符串。 I URLEncoder.encode("我的字符串"," UTF-8")创建JSON数组之前的字符串。
(我几乎可以肯定这种方法也有问题,但我可能做了一次编码太多了)
反正: 在javascript中我运行unescape()来获取结果,但空格(编码为+)不会被解码。
所以我在调用unescape()之前使用.replace(/\+/g,' ')
替换+空格。
可是:
省略前导和尾随+符号 和 连续的+符号被一个空格所取代。
请帮我(或者介意):)
答案 0 :(得分:1)
使用此
var string="+Salvis+Sumeet+Jacob,Srlawrjhkjh+"
var str=string.replace(/[+ ]+/g, " ");
console.log(str)
答案 1 :(得分:0)
你的正则表达式对我有用,
> "++foo+bar++".replace(/\+/g," ");
' foo bar '
答案 2 :(得分:0)
所以我想
省略前导+尾随+符号,连续+符号由单个空格替换。
是您想要实现的目标,而不是您目前获得并希望避免的结果。如果是这样的话那么
.replace(/\++/g,' ').trim()
将使用单个空格替换每个或多个+
个字符,然后删除前导/尾随空格。
"++foo+bar++baz+".replace(/\++/g,' ').trim()
// "foo bar baz"
答案 3 :(得分:0)
unescape()
没有将+
更改为空格的原因是因为......它不是其规范的一部分。
ascii-space-character-as-plus-sign编码相当不标准(虽然受到广泛支持),并且可以追溯到早期版本的HTML。
根据unescape()
和escape()
的规范,unescape()
更改的唯一内容是%XX
和%uXXXX
形式的十六进制转义序列。 escape()
用一些十六进制转义序列替换一小部分无限制字符之外的unicode字符; unescape()
,当然,只是改变了操作。