转义jquery ajax发送的字符串中的所有特殊字符

转义jquery ajax发送的字符串中的所有特殊字符,jquery,text,Jquery,Text,我试图在执行contentType:“application/json;charset=utf-8”时,以键值对的形式发送文本,ajax发布到web服务。我面临的问题是,如果其中一个参数(接受来自用户的文本)有引号(“),它会破坏代码[Eror message:传入的对象无效]。到目前为止,我尝试了这些参数,但没有成功 var text = $("#txtBody").val(); var output1 = JSON.stringify(text); var output2 = text.

我试图在执行
contentType:“application/json;charset=utf-8”时,以键值对的形式发送文本,
ajax发布到web服务。我面临的问题是,如果其中一个参数(接受来自用户的文本)有引号(“),它会破坏代码[Eror message:传入的对象无效]。到目前为止,我尝试了这些参数,但没有成功

var text = $("#txtBody").val(); 
var output1 = JSON.stringify(text); 
var output2 = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 
关于如何转义jquery ajax帖子中的特殊字符有什么想法吗?

2020更新 使用,一个来自MDN的示例

//对诸如?、=、/、&等字符进行编码:
console.log(编码组件('?x=ццццц');
//预期输出:“%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B”
log(encodeURIComponent('?x=test'));
//预期输出:“%3Fx%3Dtest”
它期望一个完整的URI也值得一看

我以前的建议是使用
escape()
方法,但现在它已被弃用,很快也将被删除

在编写新的ECMAScript代码时,程序员不应使用或假设存在这些特性和行为

更多:


为什么不使用
转义

escape(text);

编辑!!!!

正如评论中提到的,这是不推荐的

方法计算一个新字符串,其中某些字符已被十六进制转义序列替换。请改用encodeURI或encodeURIComponent

请改为使用以下选项之一:


对于那些会发现这个问题的人: 不要使用转义方法,因为它已从Web上删除 使用
encodeURIComponent()
encodeURI()
代替


我遇到了同样的问题,为了解决这个问题,我改变了调用ajax的方式

我有点像

var datatosend = "Hello+World";

$.ajax({
    "type": "POST", 
    "data": "info=" + datatosend 
它在post info=Hello World上发送,将字符+替换为一个空格

因此,我将其更改为正确的json字符串

$.ajax({
    "type": "POST", 
    "data": {"info":datatosend}, 
现在它工作了。info=Hello+World

  • 不要使用
    escape()
    。来源:
  • 程序员不应该使用或假设这些特性和行为的存在

  • 不要使用
    encodeURI()
    (下面列出的备选方案)。来源:
  • 如果希望遵循最近的RFC3986查找URL…以下代码段可能会有所帮助:

    函数fixedCodeUri(str){
    返回encodeURI(str).replace(/%5B/g,“[”).replace(/%5D/g,“]);
    }

  • 不要使用
    encodeURIComponent()
    (下面列出的备选方案)。来源:
  • 为了更严格地遵守RFC 3986(保留!、'、(、)和*),即使这些字符没有正式的URI定界用途,也可以安全地使用以下字符:

    函数fixedCodeUriComponent(str){
    返回encodeURIComponent(str)。替换(/[!'()*]/g,函数(c){
    返回“%”+c.charCodeAt(0).toString(16);
    });
    }


    因此,如果要对除以下运算符以外的所有数据进行编码:
    +@?=:#,$&
    ,请使用
    FixedCodeUri()
    。如果要包含这些字符(用于定义
    GET
    参数和其他用途),请使用
    FixedCodeUriComponent()

    您的答案对我很有用Starx。但不幸的是,他们不允许我标记多个答案。抱歉:(此功能在JS中被弃用。我添加了一个答案,因为使用escape Method不是一个好的做法。弃用此功能已从Web上删除。虽然某些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的页面或Web应用程序可能随时中断。不,永远不要使用en。)codeURI(),它是不可靠的,并且基于猜测。encodeURI根据
    &
    =
    字符猜测数据名称和值的开始和结束位置,这种猜测可能是错误的。作为一个直接示例,此url由encodeURI错误编码:
    encodeURI(“http://example.org/?foo=i 爱我的母亲和父亲)
    -这里的foo应该是
    我爱我的母亲和父亲
    ,但encodeURI将其编码为
    我爱我的母亲
    -同时,encodeURIComponent进行0次猜测,并在这里正确工作:
    “http://example.org/?foo=“+encodeURIComponent(“我爱我的父母”);