我如何PHP-unserialize jQuery序列化的表单?

Gen*_*ean 153 php jquery serialization

使用$('#form').serialize(),我能够将其发送到PHP页面.现在我如何在PHP中反序列化它?它是在jQuery中序列化的.

Chr*_*ane 375

前提是您的服务器正在接收一个类似于此的字符串(如果您使用的是jQuery,它应该是这样的serialize()):

"param1=someVal&param2=someOtherVal"
Run Code Online (Sandbox Code Playgroud)

...这样的事情可能就是你所需要的:

$params = array();
parse_str($_GET, $params);
Run Code Online (Sandbox Code Playgroud)

$params然后应该是一个模型,你会期望如何.请注意,这也适用于HTML数组.

有关更多信息,请参阅以下内容:http: //www.php.net/manual/en/function.parse-str.php

希望这很有帮助.祝好运!

  • 这个答案应该被接受,实际的答案是没有答案的. (81认同)
  • 这是最好的方式.parse_str($ _ REQUEST ['jquery_serialized_values'],$ output); 的print_r($输出); (5认同)
  • 作为给出接受答案的用户,我同意这是正确的答案.我根据假设请求是通过jQuery ajax $ .get/post方法(不确定我从哪里得到)发送给我的答案,它确实将serialize()函数的输出作为标准GET变量发送.所以不需要进行字符串解析.例如:$ .get('ajax.php',$('form').serialize(),function(){}); (3认同)
  • 这种方法比其他方法好多了. (2认同)

Chr*_*rez 66

您不必从jquery serialize方法中反编译PHP中的任何内容.如果序列化数据,如果使用GET方法ajax请求,则应将其作为查询参数发送给PHP,如果使用POST ajax请求,则应将其发送到vars.所以在PHP中,您可以访问类似于$_POST["varname"]$_GET["varname"]取决于请求类型的值.

serialize方法只接受表单元素并将它们以字符串形式放置."varname=val&var2=val2"

  • 这是不正确的。您确实需要解析 `serialize` 返回的字符串。请参阅下面真正流行的答案。 (8认同)
  • "是"*眨眼*;) (4认同)

小智 47

// jQuery Post

var arraydata = $('.selector').serialize();
Run Code Online (Sandbox Code Playgroud)

// jquery.post序列化var - TO - PHP数组格式

parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array
Run Code Online (Sandbox Code Playgroud)

//你得到了同样的东西

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )
Run Code Online (Sandbox Code Playgroud)


dan*_*car 16

parse_str($_POST['whatever'], $searcharray);
Run Code Online (Sandbox Code Playgroud)


mgh*_*hgm 7

HTML页面中:

<script>
function insert_tag()
{
    $.ajax({
        url: "aaa.php",
        type: "POST",
        data: {
            ssd: "yes",
            data: $("#form_insert").serialize()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            $("#result1").html(jsonStr['back_message']);
        }
    });
}
</script>

<form id="form_insert">
    <input type="text" name="f1" value="a"/>
    <input type="text" name="f2" value="b"/>
    <input type="text" name="f3" value="c"/>
    <input type="text" name="f4" value="d"/>
    <div onclick="insert_tag();"><b>OK</b></div>
    <div id="result1">...</div>
</form>
Run Code Online (Sandbox Code Playgroud)

PHP页面上:

<?php
if(isset($_POST['data']))
{
    parse_str($_POST['data'], $searcharray);
    $data = array(
        "back_message"   => $searcharray['f1']
    );
    echo json_encode($data);
}
?>
Run Code Online (Sandbox Code Playgroud)

在这个PHP代码上,返回f1字段.


小智 6

只需这样做

$get = explode('&', $_POST['seri']); // explode with and

foreach ($get as $key => $value) {
    $need[substr($value, 0 , strpos($value, '='))] =  substr(
        $value, 
        strpos( $value, '=' ) + 1 
    );
}

// access your query param name=ddd&email=aaaaa&username=wwwww&password=wwww&password=eeee
var_dump($need['name']);
Run Code Online (Sandbox Code Playgroud)


Mur*_*ain 5

为什么不使用关联数组,这样你就可以轻松使用它

function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $array = explode("=", $item);
        $returndata[$array[0]] = $array[1];
    }

    return $returndata;
}
Run Code Online (Sandbox Code Playgroud)

问候

  • 我不明白你的`$i = 0;` (4认同)

Tom*_*ski 5

修改后的穆尔塔扎侯赛因回答:

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}
Run Code Online (Sandbox Code Playgroud)