20

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

var text = $("#txtBody").val(); 
var output1 = JSON.stringify(text); 
var output2 = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 

关于如何为 jquery ajax 帖子转义特殊字符的任何想法?

4

5 回答 5

35

为什么不使用escape

escape(text);

https://developer.mozilla.org/en/DOM/window.escape

编辑!!!!

正如评论中提到的,这已被弃用。

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

而是使用以下方法之一:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

于 2012-04-12T23:14:28.877 回答
14

对于那些会发现这个问题的人: 不要使用已从 Web 中删除的转义方法,或者encodeURIComponent()使用 encodeURIComponent () encodeURI()encodeURI()

于 2014-01-20T15:05:06.070 回答
4

我遇到了同样的问题,为了解决它,我改变了进行 ajax 调用的方式。

我有类似的东西

var datatosend = "Hello+World";

$.ajax({
    "type": "POST", 
    "data": "info=" + datatosend 

它发送信息=Hello World,用空格替换字符+。

所以我把它改成正确的json字符串

$.ajax({
    "type": "POST", 
    "data": {"info":datatosend}, 

现在它可以工作了。信息=你好+世界

于 2014-03-25T14:36:05.987 回答
3

2020 更新

使用encodeURIComponent,一个来自 MDN 的示例。

// encodes characters such as ?,=,/,&,:
console.log(encodeURIComponent('?x=шеллы'));
// expected output: "%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"

console.log(encodeURIComponent('?x=test'));
// expected output: "%3Fx%3Dtest"

期望完整 URI的encodeURI也值得一看。

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

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

更多:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape

于 2012-04-12T23:14:10.437 回答
0
  1. 不要使用escape(). 资料来源: MDNescape()文档...

程序员不应使用或假设这些功能和行为的存在......

  1. 不要使用encodeURI(). (下面列出了替代方案。) 来源: MDNencodeURI()文档...

如果希望遵循更新的 RFC3986 的 URL ...以下代码片段可能会有所帮助:

function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }

  1. 不要使用encodeURIComponent(). (下面列出了替代方案。) 来源: MDN encodeURIComponent() 文档...

为了更加严格地遵守 RFC 3986(保留 !、'、(、) 和 *),即使这些字符没有正式的 URI 分隔用途,也可以安全地使用以下内容:

function fixedEncodeURIComponent(str) { return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { return '%' + c.charCodeAt(0).toString(16); }); }

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

于 2020-06-17T19:58:25.120 回答