代码之家  ›  专栏  ›  技术社区  ›  Alexander_F

用JS和PHP转义“+”

  •  2
  • Alexander_F  · 技术社区  · 14 年前

    我做了一个应用程序,

    编写一些文本,文本将保存在Ajax上。在发送请求之前,我用JS对其进行了转义。但无论如何,“+”字符将转换为“”空格字符…

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

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

    代码:

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

    也许有人知道更好的解决办法…我用的是UTF-8…像“_·”这样的德语字符,我在通过Ajax从DB获取时也遇到了“_····”的问题。还有很多其他的角色……

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

    需要帮助:

    2 回复  |  直到 14 年前
        1
  •  6
  •   bobince    14 年前

    因此,我试图在发送之前查找并替换“%plus%”

    这是不够的。如果您未能对URL进行编码, + 符号,你几乎肯定忘记了URL编码任何东西,还有很多其他的字符,如果不是URL编码的话会导致失败,而不仅仅是加号。

    你需要使用 encodeURIComponent() 创建对参数中特殊字符进行编码的请求时:

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

    否则,任何不适合URL的字符都将导致损坏,包括 + (这意味着如果查询参数中包含空格,则需要一个真正的加号) %2B )以及许多其他标点符号,以及所有非ASCII字符(例如 € 应该是 %E2%82%AC ,使用UTF-8编码)。

    在任何情况下都不要使用javascript escape() unescape() 功能。 这些不是URL编码,而是Javascript特有的非标准编码,看起来类似于URL编码,但不兼容。尤其是所有非ASCII字符都会被残缺,这就是为什么 艾斯 不会起作用的。

        2
  •  4
  •   kennytm    14 年前

    匹配一个 + 在regex中,你需要逃避它,因为 + 它本身就是一个特殊的角色。

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

    btw,正确的编码 + %2b . 你可以使用 encodeURIComponent 为此,在javascript中。(不要使用) escape ,已弃用。)