用JS和PHP逃避“+”

时间:2010-07-13 14:15:48

标签: php javascript encoding

我做了一个应用程序,

你写了一些文字,文字将保存在ajax上。在发送请求之前,我用js将其转义。但不知何故,“+”字符将转换为“”空格字符......

所以我在发送“%plus%”之前尝试查找和替换,但我收到了错误消息:

Uncaught SyntaxError:无效的正则表达式:/ + /:无需重复

代码:

var replace = "%plus%";
            while(title.search(sign) != -1) {
               title.replace("+", replace);
            }

也许有人知道一个更好的解决方案...我使用utf-8 ...和德语字符如“ä”我也有问题“€”从数据库通过Ajax获取...和很多其他角色......

如果我在php中使用rawescape()和使用js中的unescape(),我会得到很好的结果(但仍然存在问题 - >>%u20AC

需要帮助:)

2 个答案:

答案 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,不推荐使用。)