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 を解析して結果のオブジェクトからデータを取得する代わりに、etc にアクセスするだけです)

于 2012-06-14T10:11:07.473 に答える