0

在我的大多数 AJAX 函数中,我必须对用户输入的自由文本进行双重编码,即我必须执行 encodeURIComponent(encodeURIComponent(myString))。

如果我只做一次,除了双引号和长连字符之外的大多数符号都有效。

如果我从单个编码中警告结果,引号被编码,但它会破坏 JSON 字符串,这就是我感到困惑的原因。

这是 JavaScript 的错误还是我遗漏了什么?它是否与您必须在 PHP 中对 & 符号进行双重编码才能使其工作的方式有关?


你好,

这是允许用户针对某事存储注释的代码:

function saveAdminNote() {

var note = encodeURIComponent(encodeURIComponent($('#adminNote').val().replace(/(\r\n|\n|\r)/gm,""))) ;
JSON = '{"mode":"UPDATE_INTNOTE", "jobid":'+jobId+', "note":"'+note+'"}' ;

clearTimeout(tOut2) ;
tOut2 = setTimeout(function(){             
    $.ajax({
        data: 'dataString='+JSON,
        url: 'core/job-builder-controlV2.php',
        type: 'POST',
        success: function(data){
            if(data)
            {
                $.prompt(data) ;
            }
        }
    })

}, 250) ;

}

那么如果我的数据结构是扁平的,那么使用 JSON 就没有优势了吗?

我的印象是 JSON 提供了更多的安全性?

4

2 回答 2

2

不要手动构造 JSON,让正确的JSON.stringify方法为您完成工作(也不要覆盖全局 JSON 对象)。

json = JSON.stringify({
   "mode":"UPDATE_INTNOTE",
   "jobid": jobId,
   "note": $('#adminNote').val() 
})
于 2012-06-14T10:10:15.553 回答
2

基本问题是您试图通过将字符串混搭在一起(而不是使用 JSON 库)来构造 JSON……并对这些字符串的部分进行编码(而不是对生成的 JSON 字符串进行编码(即您想要放置的非 URI 数据)进入 URI)... jQuery 将为您做的)。

如果您想将 JSON 作为表单编码数据请求的一部分提交,那么您将:

$.ajax({
    data: { 
        dataString: JSON.stringify({ 
            "mode": "UPDATE_INTNOTE", 
            "jobid": jobId, 
            "note": $('#adminNote').val() 
        })
    }, 
    …

由于您在这里有一个平面数据结构(即数据中没有对象或数组),因此您根本不需要使用 JSON。

$.ajax({
        data: { 
            "mode": "UPDATE_INTNOTE", 
            "jobid": jobId, 
            "note": $('#adminNote').val() 
            }, 

(然后,在您的 PHP 中,只需访问$_POST['mode']等,而不是解析 JSON,然后从结果对象中获取数据)

于 2012-06-14T10:11:07.473 回答