2010-07-13 121 views
2

我已经提出了一个应用程序,用JS和PHP逃脱“+”

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

所以我tryed寻找和发送之前替换“%加%”,但我得到THES错误消息:

未捕获语法错误:无效的正则表达式:/ + /:没有重复

代码:

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

也许有些人知道这个更好的解决方案。我使用UTF-8 ...和德语文字工作像“ä”我也有问题与“€”,同时从数据库获取它在Ajax ...和很多其他字符....

我有很大的成绩,如果我rawescape()在PHP和JS UNESCAPE()(但仍与€问题 - >%u20AC

需要帮助:)

回答

6

So i tryed to find and replace before sending in "%plus%"

这是不够的。如果您无法对+符号进行网址编码,您几乎可以肯定会忘记对任何内容进行网址编码,并且还有许多其他字符会导致失败,如果没有进行网址编码而不是加号。

您需要在创建请求时使用encodeURIComponent()编码参数内的特殊字符:

var url= 'something?param='+encodeURIComponent(param)+'&other='+encodeURIComponent(other); 

否则,不适合在URL中的任何字符会导致腐败,包括+(这意味着如果一个空间包含在查询参数中;对于真实加号,您需要%2B)和许多其他标点符号以及所有非ASCII字符(例如,使用UTF-8编码的应为%E2%82%AC)。

请勿在任何情况下使用JavaScript escape()unescape()函数。这些不是URL编码,而是JavaScript特有的非标准编码,与URL编码类似但不兼容。特别是所有非ASCII字符都会被破坏,这就是为什么不起作用。

4

要在正则表达式中匹配+,您需要转义它,因为+本身是一个特殊字符。

return theText.replace(/\+/g, "%plus%"); 

顺便说一句,的+正确的编码是%2b。您可以在Javascript中使用encodeURIComponent。 (不要使用escape,已弃用。)

+0

encodeURIComponent这是我的问题的解决方案!谢谢。 – 2010-07-13 14:39:22

+0

但现在我有德文字符的问题,一个函数必须在PHP中使用? – 2010-07-13 14:48:38

+0

@Fincha:什么问题? – kennytm 2010-07-13 15:47:37