PHP, как передать в GET\POST-запросе знак & (амперсанд)?
Новая тема Написать ответ
# Вт Авг 13, 2013 4:33 pmYabuti Зарег.: 28.11.2008 ; Сообщ.: 16263Ответить с цитатой
Всем привет!
Мучаюсь уже второй день с такой проблемой - когда php-скрипту обработчику отправляются данные переменной с формы, содержащей значок & в строке, то он их разделяет как две разные переменные.
Переменная - строка для ввода УРЛа, может содержать или не содержать амперсанд, например, задаются такие строки:
http://site.com/
или
http://site.com/index.html
или
http://site.com/index.php?a=123&b=super
и т.д.

Обработчик:
<form action=1.php method=get>
<input type=text name=url>
<input type=submit>
</form>

<?php
echo $_GET['url'];
?>

Первые две строки, без амперсанда, воспримет нормально, а третью разделит по амперсанду в две переменные.

Подскажите, как можно решить эту проблему?

Заранее большое спасибо! Drinks or Beer
# Вт Авг 13, 2013 7:01 pmexolon Зарег.: 22.11.2007 ; Сообщ.: 2397Ответить с цитатой
Посылай post'ом
# Вт Авг 13, 2013 7:58 pmIseeDeadPeople Зарег.: 06.12.2005 ; Сообщ.: 21733Ответить с цитатой
Конечно используй пост, он и безопасней будет, get больше для случаев, когда на линк заходишь сразу с браузера, без форм, т.е. напр domain.com/admin.php?login=111&pass=222

замени

<form action=1.php method=get>

на

<form action=1.php method=post>


Также,

<?php
echo $_GET['url'];
?>

замени на

<?php
echo $_POST['url'];
?>
# Вт Авг 13, 2013 8:02 pmYabuti Зарег.: 28.11.2008 ; Сообщ.: 16263Ответить с цитатой
exolon, действительно, чего-то меня переклинило немного Smile

POST-запросом:
<form action=2.php method=post>
<input type=text name=a style="width:550px;" value="http://ya.ru/index.php?id=789&subid=super"><br>
<input type=text name=b style="width:550px;" value="100"><br>
<input type=submit>
</form>

обработчик:
<?php

echo $_POST['a'];
echo "<br>".$_POST['b'];

?>

И все нормально. А GET-запросом никак, столько мучился.
Спасибо! :thup: Drinks or Beer
# Вт Авг 13, 2013 8:03 pmIseeDeadPeople Зарег.: 06.12.2005 ; Сообщ.: 21733Ответить с цитатой
Вообще, и через гет, браузер должен кодировать строку, а пхп на стороне хоста, его декодировать, знаки разделения гет переменных, не должны вроде как прерывать переменные. Может у тебя пхп какой то еще 4-ой версии. На современных версиях, никогда подобного не встречал, хотя то что такое явление может быть, совершенно возможно.
# Вт Авг 13, 2013 8:04 pmYabuti Зарег.: 28.11.2008 ; Сообщ.: 16263Ответить с цитатой
IseeDeadPeople, спасибо!
Да я знаю как с GET и POST работать, просто писал API-скрипт для своего сервиса, хотел через GET сделать, так удобнее, когда одной строкой запрос, можно через file_get_contents получить результат, зациклился именно на GET-запросе.
Остается только POST :thup:
# Вт Авг 13, 2013 9:34 pmJM Зарег.: 25.08.2006 ; Сообщ.: 1382Ответить с цитатой
Бррр че ты морочишься объясни еще раз? Если гет и в запросе у тебя &, то тебе надо юрленкод юзать
http://php.net/manual/ru/function.urlencode.php

У поста минусы т.ч. локально хрен потестишь надо форму рисовать Smile

Вот так гет пропиши и увидишь что браузер сам кодирует & в то что надо.
<form action=2.php method=get>
<input type=text name=a style="width:550px;" value="http://ya.ru/index.php?id=789&subid=super"><br>
<input type=text name=b style="width:550px;" value="100"><br>
<input type=submit>
</form>
# Вт Авг 13, 2013 10:35 pmYabuti Зарег.: 28.11.2008 ; Сообщ.: 16263Ответить с цитатой
JM, когда GET-запрос приходит, то он думает, что здесь три переменных:
2.php?a=http://ya.ru/index.php?id=789&subid=super&b=100
Через POST так:
action = 2.php
a = http://ya.ru/index.php?id=789&subid=super
b = 100
# Вт Авг 13, 2013 10:45 pmJM Зарег.: 25.08.2006 ; Сообщ.: 1382Ответить с цитатой
Ничего подобного 2 переменные и есть...
2.php?a=http%3A%2F%2Fya.ru%2Findex.php%3Fid%3D789%26subid%3Dsuper&b=100

echo urlencode('http://ya.ru/index.php?id=789&subid=super');
сам посмотри что выдаст и это же выдаст браузер если ты в форму пропишешь get вместо post

В пост тебе тоже надо переменные загонять через urlencode ващето или ты в дампе увидишь что один хер их там ТРИ!!!
# Вт Авг 13, 2013 11:07 pmYabuti Зарег.: 28.11.2008 ; Сообщ.: 16263Ответить с цитатой
JM, а как я эти данные в обработчик получу?

Т.е. либо $_GET['variable']; либо $_POST['variable']; и GET на переменную 'a' отдаст только http://ya.ru/index.php?id=789 вместо http://ya.ru/index.php?id=789&subid=super, посчитав, что subid - это тоже переменная.
# Вт Авг 13, 2013 11:13 pmJM Зарег.: 25.08.2006 ; Сообщ.: 1382Ответить с цитатой
Блин )
Я тебе про фому ты мне про ерему Smile
Так (неправильно отдашь), посчитает за две
http://ya.ru/index.php?id=789&subid=super
и
если так (правильно отдашь) посчитает за одну!!!
http%3A%2F%2Fya.ru%2Findex.php%3Fid%3D789%26subid%3Dsuper
Разницу видишь как правильно и как не правильно?
На гугл зайди увидишь Smile
http://www.google.com/search?q=habra - второй линк
http://www.google.com/url?q=http://ru.wikipedia.org/wiki/%25D0%25A5%25D0%25B0%25D0%25B1%25D1%2580%25D0%25B0%25D1%2585%25D0%25B0%25D0%25B1%25D1%2580

положи в 2.php
<?php
echo "a:$a b:$b subid:$subid";
?>
и пошли
1. 2.php?a=http%3A%2F%2Fya.ru%2Findex.php%3Fid%3D789%26subid%3Dsuper&b=100
2. 2.php?a=http://ya.ru/index.php?id=789&subid=super&b=100

Сам все увидишь!

вот так правильно если тебе надо дальше запулить грубо говоря...
file_get_contents ("http://domain.com/?a=".urlencode($_GET['a'])."&b=".urlencode($_GET['b']));
# Ср Авг 14, 2013 5:30 amYabuti Зарег.: 28.11.2008 ; Сообщ.: 16263Ответить с цитатой
JM, спасибо! :thup:
# Ср Авг 14, 2013 9:32 amJM Зарег.: 25.08.2006 ; Сообщ.: 1382Ответить с цитатой
Обращайся Smile
# Ср Авг 14, 2013 11:53 amexolon Зарег.: 22.11.2007 ; Сообщ.: 2397Ответить с цитатой
Точно так. Если браузер сабмитит форму, то он сам делает urlencode.
Если дергаешь через file_get_contents , то надо вручную сделать urlencode.
# Ср Авг 14, 2013 12:56 pmIseeDeadPeople Зарег.: 06.12.2005 ; Сообщ.: 21733Ответить с цитатой
Я про тоже, любой браузер должен сам гет запрос, query переменную заurlencoдить при передаче на хост.

Что то мне кажется, дело в браузере Яба, или же, какие то там настройки не те стоят.
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.