Php curl和序列化问题

时间:2011-01-11 18:24:28

标签: php serialization post curl

为了通过我的curl脚本传递数组变量,我使用serialize因为curl POST元素不能是数组。

序列化后得到的字符串是:

a:10:{s:8:"question";s:18:"How are you doing?";s:11:"view_option";s:6:"select";s:10:"txt_answer";a:4:{i:0;s:8:"dsadsdsa";i:1;s:5:"dsads";i:2;s:10:"dsadsdsdsa";i:3;s:0:"";}s:4:"next";s:1:"9";s:7:"bgimage";s:0:"";s:9:"bck_color";s:0:"";s:12:"border_color";s:0:"";s:11:"select_font";s:1:"1";s:9:"font_size";s:4:"12px";s:4:"poll";s:9:"Get Poll!";} 

Curl成功:

a:10:{s:8:\"question\";s:18:\"How are you doing?\";s:11:\"view_option\";s:6:\"select\";s:10:\"txt_answer\";a:4:{i:0;s:8:\"dsadsdsa\";i:1;s:5:\"dsads\";i:2;s:10:\"dsadsdsdsa\";i:3;s:0:\"\";}s:4:\"next\";s:1:\"9\";s:7:\"bgimage\";s:0:\"\";s:9:\"bck_color\";s:0:\"\";s:12:\"border_color\";s:0:\"\";s:11:\"select_font\";s:1:\"1\";s:9:\"font_size\";s:4:\"12px\";s:4:\"poll\";s:9:\"Get Poll!\";}

发送到服务器之前。以上是我在服务器端看到的内容。现在,由于反斜杠,上面的不是不可序列化。

我现在该怎么办?如果我只是忽略所有引号 - 我如何区分CURL放置的转义和可能属于数据的转义?


修改

尝试反序列化转义字符串时出现的错误是:

Notice: unserialize() [function.unserialize]: Error at offset 304 of 351 bytes in /var/www/localserver/test/ser.php on line 8

感谢

JP

2 个答案:

答案 0 :(得分:1)

您的服务器可能已启用magic quotes,这意味着您的输入数据已转义。

您可以选择在php.ini文件中将其停用,或在收到数据时拨打stripslashes

作为数据一部分的转义将被双重转义,因此取消它们应该不是问题。

在php.ini中禁用

magic_quotes_gpc = Off

<强> stripslashes

$data = stripslashes($_POST['data']);

答案 1 :(得分:1)

正如我在评论中提到的,您可能想尝试使用JSON。但是,我想指出这对我来说很好。

<?php

$c = "a:10:{s:8:\"question\";s:18:\"How are you doing?\";s:11:\"view_option\";s:6:\"select\";s:10:\"txt_answer\";a:4:{i:0;s:8:\"dsadsdsa\";i:1;s:5:\"dsads\";i:2;s:10:\"dsadsdsdsa\";i:3;s:0:\"\";}s:4:\"next\";s:1:\"9\";s:7:\"bgimage\";s:0:\"\";s:9:\"bck_color\";s:0:\"\";s:12:\"border_color\";s:0:\"\";s:11:\"select_font\";s:1:\"1\";s:9:\"font_size\";s:4:        \"12px\";s:4:\"poll\";s:9:\"Get Poll!\";}";

print_r(unserialize($c)); 

<强>输出

Array
(
    [question] => How are you doing?
    [view_option] => select
    [txt_answer] => Array
        (
            [0] => dsadsdsa
            [1] => dsads
            [2] => dsadsdsdsa
            [3] => 
        )

    [next] => 9
    [bgimage] => 
    [bck_color] => 
    [border_color] => 
    [select_font] => 1
    [font_size] => 12px
    [poll] => Get Poll!
)

修改
正如@lonesomeday所提到的,您可能在接收此数据的服务器上启用了php魔术引号。