对JSON进行双重编码

时间:2012-06-14 08:49:48

标签: php javascript ampersand double-quotes encodeuricomponent

在我的大多数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提供了更多的安全性?

2 个答案:

答案 0 :(得分:2)

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

json = JSON.stringify({
   "mode":"UPDATE_INTNOTE",
   "jobid": jobId,
   "note": $('#adminNote').val() 
})

答案 1 :(得分: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,然后从结果对象中获取数据)