开发者

Php curl and serialize problem

开发者 https://www.devze.com 2023-02-04 17:02 出处:网络
In order to pass array variables via my curl script, I am using serialize because curl POST elements must not be arrays.

In order to pass array variables via my curl script, I am using serialize because curl POST elements must not be arrays.

The string that I get after serialization is:

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 makes it:

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!\";}

before sending to the server. Above is what I see at the server end. Now, be开发者_开发技巧cause of the backslashes, above is not unserializable.

What do I do now? If I just unescape all quotes - how do I distinguish between escapes put by CURL and escapes that could be part of the data?


EDIT

The error I get when trying to unserialize the escaped string is:

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

thanks

JP


Your server probably has magic quotes enabled, which means that your input data is escaped.

Your options are to disable it in your php.ini file or to call stripslashes on the data when it is received.

Escapes that are part of the data will be double escaped, so unescaping them shouldn't be a problem.

Disabling in php.ini

magic_quotes_gpc = Off

stripslashes

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


As I mentioned in my comments, you may want to try JSON instead. But, wanted to point out that this works fine for me.

<?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)); 

OUTPUT

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!
)

EDIT
As mentioned by @lonesomeday, you probably have php magic quotes turned on on the server receiving this data.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号