У меня переменная часто бывает в виде массива и при этом в строке скрипта с функцией urlencode() возникает ошибка: Код (Text): Warning: urlencode() expects parameter 1 to be string, array given in C:\test\script.php on line 15 Подскажите, как применить к переменной в виде массива функцию urlencode() чтобы не было ошибки.
Я запутался Не могу понять как собрать после urlencode() массива все в одну правильную для POST запроса строку. Помогите. Я вот нашел на php.net функцию которая вроде как для этого и предназначена, но не пойму, как ею правильно пользоваться: PHP: I just came across the need for a function that exports an array into a query string. Being able to use urlencode($theArray) would be nice, but here's what I came up with: <?php function urlencode_array( $var, // the array value $varName, // variable name to be used in the query string $separator = '&' // what separating character to use in the query string ) { $toImplode = array(); foreach ($var as $key => $value) { if (is_array($value)) { $toImplode[] = urlencode_array($value, "{$varName}[{$key}]", $separator); } else { $toImplode[] = "{$varName}[{$key}]=".urlencode($value); } } return implode($separator, $toImplode); } ?> This function supports n-dimensional arrays (it encodes recursively). У меня есть переменная $post которой нужно сделать urlencode(). Переменная моя сложная. Состоит из элементов которые могут быть массивами. Подскажите плиз, как мне вызвать правильно код написаной функции и получить нужный от нее результат?
О! Кажись то что мне надо! Спасибо! А к переменной обработанной этой функцией в конце нужно добавлять вот это "\r\n\r\n"; или она уже содержит?
PHP: <?php function urldecode_array($var){ foreach ($var as $key=>$value){ if(is_array($value)){ //На случай вложеного массива $value=urldecode_array(&$value); } else { $value=urldecode($value); } $var[$key]=$value; } return $var; } Это же очевидно...
А почему urldecode()? Мне ведь передать данные нужно на сервер... А при передаче их нужно не раскодировать, а закодировать.
Потому что я прочитал название темы не правильно Если тебе надо просто массив передать, то можно так: PHP: <? $url=urlencode(serialize($array)); //Шифрование $url_array=unserialize(urldecode($_GET['var'])); //Расшифровка обратно в массив Upd. Длинна переменной, передаваемой в GET, не может быть более 255 символов.
С GET у меня все в порядке. И с обычными POST, когда переменная не в виде массива - тоже. Но когда переменная в виде массива - нет нужного эффекта. Можно ли как-то глазами глядя на эту ПОСТ переменную определить - правильная она или нет? Не пойму, как глядя на переменную увидеть, что она содержит массивы. Чем они выделяются? Амперсанд разделяет переменные, а какой символ разделяет массивы? Подскажите, может тогда найду ошибку.
что именно не так? PHP: <?php print http_build_query(array('a' => array('b', 'c'))); Код (Text): a%5B0%5D=b&a%5B1%5D=c
блудный сын Тебе всего-навсего надо передать массив в POST? Передавай то, что возращает функция serialize, а потом опять превращай в массив функцией unserialize. Если unserialize вернет массив - значит был передан массив
PHP: <?php function urldecode_array($var){ foreach ($var as $key=>$value){ if(is_array($value)){ //На случай вложеного массива $value=urldecode_array(&$value); } else { $value=urldecode($value); } $var[$key]=$value; } return $var; } Прочитал такую хрень, что следует делать unset($value) в foreach. Было новостью.
Только если $value используется как ссылка. PHP: <?php foreach ($array as &$value) { // ... } unset($value); // если забудем, то $value будет указывать на последний элемент массива
Спасибо еще раз за http_build_query()! Очень упростила код! Но наткнулся на новую закавыку. Подскажите, а бывают ли такие случаи, когда от браузера специально сервер не требует применять к передаваемым данным встроенную в него функцию urldecode() (например давая такую команду браузеру на яваскрипте), а наоборот, требует передавать данные как есть методом ПОСТ?
Ну подскажите может ли такое быть? Когда к передаваемым данным выдвигается требование передаваться как есть и не обрабатываться с помощью urlencode()?
Потому что смотрю на заголовки ФФ и он показывает, что на одной хитрой странице одни и те же данные всегда уходят дважды: сначала не обработанные этой функцией, а потом обработанные. Я в яваскрипте нулевой, поэтому разобраться в коде страницы не смогу. А яваскрипта там дай боже... Просто скажите, может такое быть или нет.