Php curl и сериализовать проблему - PullRequest
0 голосов
/ 11 января 2011

Для передачи переменных массива через мой скрипт 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, и экранированные символы, которые могут быть частью данных?


EDIT

Ошибка, которую я получаю при попытке десериализации экранированной строки:

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

спасибо

* +1025 * JP

Ответы [ 2 ]

1 голос
/ 11 января 2011

Как я уже упоминал в моих комментариях, вы можете попробовать вместо этого 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)); 

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
Как уже упоминалось @lonesomeday, на сервере, получающем эти данные, возможно, включены магические кавычки php.

1 голос
/ 11 января 2011

Возможно, на вашем сервере магические кавычки включены, что означает, что ваши входные данные экранированы.

Вы можете отключить его в файле php.ini или вызвать stripslashes для данных при получении.

Экраны, являющиеся частью данных, будут дважды экранированы, поэтому их удаление не должно быть проблемой.

Отключение в php.ini

magic_quotes_gpc = Off

stripslashes

$data = stripslashes($_POST['data']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...