我做了一个应用程序,
你写了一些文字,文字将保存在ajax上。在发送请求之前,我用js将其转义。但不知何故,“+”字符将转换为“”空格字符......
所以我在发送“%plus%”之前尝试查找和替换,但我收到了错误消息:
Uncaught SyntaxError:无效的正则表达式:/ + /:无需重复
代码:
var replace = "%plus%";
while(title.search(sign) != -1) {
title.replace("+", replace);
}
也许有人知道一个更好的解决方案...我使用utf-8 ...和德语字符如“ä”我也有问题“€”从数据库通过Ajax获取...和很多其他角色......
如果我在php中使用rawescape()和使用js中的unescape(),我会得到很好的结果(但仍然存在问题 - >>%u20AC
需要帮助:)
答案 0 :(得分:6)
所以我在发送“%plus%”之前试图找到并替换
这还不够。如果您未能对+
符号进行URL编码,那么您几乎肯定会忘记对任何内容进行URL编码,如果没有URL编码,还有许多其他字符会导致失败,而不仅仅是加号。< / p>
在创建对参数中的特殊字符进行编码的请求时,您需要使用encodeURIComponent()
:
var url= 'something?param='+encodeURIComponent(param)+'&other='+encodeURIComponent(other);
否则,任何不适合URL的字符都会导致损坏,包括+
(如果包含在查询参数中,则表示空格;对于真正的加号,您需要%2B
)和许多其他标点符号,以及所有非ASCII字符(例如€
应该是%E2%82%AC
,使用UTF-8编码。)
在任何情况下都不要使用JavaScript escape()
和unescape()
函数。这些不是网址编码,而是JavaScript看似类似的非标准编码到URL编码但不兼容。特别是所有非ASCII字符都被删除了,这就是€
不起作用的原因。
答案 1 :(得分:4)
要匹配正则表达式中的+
,您需要将其转义,因为+
本身就是一个特殊字符。
return theText.replace(/\+/g, "%plus%");
顺便说一下,+
的正确编码是%2b
。您可以在Javascript中使用encodeURIComponent
。 (不要使用escape
,不推荐使用。)