2

str を url に取得するように配列を処理する方法は?
get prometers として PHP ページに配列を送信したいのですが、 get str の長さは気にしません。サイト管理者側でのみ使用されます。PHPサイトで配列に再処理できる場合、配列を文字列に処理するにはどうすればよいですか。

<script type="text/javascript">

    function arr_to_get_str(arr){
        // how should I make a get string from an array? 
        // what format should this str shows
        return str;
    }

    var arr=[
        [
            key :'products_id',
            operator: '>',
            value : '20'
        ],
        [
            key :'products_name',
            operator: 'like',
            value : '%hello world%'
        ]
    ];
    var base_uri='http://localhost/test.php';
    var url= base_uri + '?'+ arr_to_get_str(str);
    location.href = url;

</script>
4

4 に答える 4

1
  1. 配列の JSON 文字列を作成し、 window.btoaで Base64 にエンコードします

    var jsonString = JSON.stringify(array);
    var encString  = window.btoa(jsonString); 
    // supports all except- ie- below version 10
    
  2. リクエストパラメータで送信

    var url= base_uri + '?request='+ arr_to_get_str(arr);

  3. .phpファイルで、文字列を取得し、配列またはオブジェクトにデコードします

    $requestJsonStr = base64_decode($_GET['request']);
    
    //EITHER make an Array from the JSON-String
    $requestArray = json_decode($requestJsonStr, TRUE);
    
    //OR make an Object from the JSON-String
    $requestArray = json_decode($requestJsonStr, FALSE);
    
于 2013-05-27T14:28:54.690 に答える
1

複雑なデータ構造の場合、最適なエンコーディングは JSON です。ただし、多くの文字を非効率的に URL エスケープする必要があるため、JSON は URL ではかなり非効率的です。これはRisonの良い使用例かもしれません。Javascript の実装はサイトで、PHP の実装はこちらで見つけることができます。

于 2013-05-27T11:22:41.220 に答える
1

むしろ使用encodeURIComponent

var url= base_uri + '?q='encodeURIComponent(JSON.stringify(arr)); 

phpは次のとおりです。

$arrParameters = isset($_GET['q']) ? json_decode(url_decode(($_GET['q'])) : array();

これにより、パラメーターが取得されるか、何もない場合は空の配列が返されます。ベストプラクティスではありませんが、それが「ハック」な管理システムである場合は、それを選択してください

于 2013-05-27T11:25:18.007 に答える
0

これを試して、

function arr_to_get_str(arr){


  var str='';
    var strarr= new Array();
    for(var i=0;i<arr.length;i++)
    {
        strarr.push(arr[i]['key']+' '+arr[i]['operator']+' '+arr[i]['value']);
    }
    str=strarr.join(' AND ');
    return str;
}

var arr=[
    {
        key :'products_id',
        operator: '>',
        value : '20'
    },
    {
        key :'products_name',
        operator: 'like',
        value : '%hello world%'
    }
];
var base_uri='http://localhost/test.php';
var url= base_uri + '?q='+arr_to_get_str(arr);
alert(url);

//http://localhost/test.php?q=products_id > 20 AND products_name like %hello world%

フィドルhttp://jsfiddle.net/vSuDZ/

于 2013-05-27T11:22:24.327 に答える