Ограничение на длину символа $ _GET?

#php #get

#php #получить

Вопрос:

У меня есть переменная, которая состоит из

   // The First Page (hello.php)

 $a = 'goto.php?a_56=63525588000amp;url=http://www.example.com/site/DISC cUSTOMc Studio 24 -                Windows/1142766.p?
       id=1218224802931amp;usi=1142766amp;cmp=RMXamp;
       ky=2crslw0k9ZOM0ciu2rqi4NsYY7eQnnEyP';

 // The Second Page (goto.php)
 $r = $_GET['url'];

 echo $r; 

//http://www.example.com/site/Disc cCustomc Studio 8 - Windows/1142766.p?id=1218224802931
  

Почему это отключается?

Комментарии:

1. Может быть, это не URL-кодированный — используйте «urlencode» для построения запроса и используйте urldecode для получения данных. смотрите php.net/manual/en/function . urlencode.php amp; php.net/manual/en/function.urldecode.php

2. хотя здесь проблема была не в этом, имейте в виду, что данные, которые вы можете передавать с помощью метода GET, ограничены по длине (примерно до нескольких кБ)

Ответ №1:

Это не проблема с длиной, это потому, что вы хотите, чтобы один из ваших параметров GET ( url в данном случае) содержал amp; символ. Вам нужен urlencode этот символ, иначе он будет интерпретирован как другой параметр GET в запросе, а не как часть url параметра.

При urlencoding, amp; станет & и ваша строка запроса станет такой,

 goto.php?a_56=63525588000amp;url=http://www.example.com/site/DISC cUSTOMc Studio 24 - Windows/1142766.p?id=1218224802931&usi=1142766&cmp=RMX&ky=2crslw0k9ZOM0ciu2rqi4NsYY7eQnnEyP
  

Комментарии:

1. Хорошо, я думаю, что 3 из них было достаточно: D

2. @Wesley Я начал писать это до того, как здесь появился какой-либо ответ:p. Это одна из проблем, связанных с тем, что вы на самом деле не торопитесь с ответом, к тому времени, когда вы нажмете отправить, 3 человека уже подскочили с тем же ответом : ( Все еще.. лучше иметь три одинаковых ответа, чем вообще никакого ответа 🙂

3. Я всегда перезагружаюсь, когда опускается оранжевая полоса doom, чтобы убедиться, что я действительно добавляю что-то вместо дублирования. Как я уверен, вы знаете, люди любят вставлять ранний полуответ, а затем его тонкую настройку. Здесь проголосуйте сочувственно, потому что мы все были там. Тем не менее, это заняло у вас 5 минут, чтобы напечатать?

4. @Wesley Murch — Поскольку вы высказали сочувствие, я продолжу делать то же самое

5. @Wesley, ха-ха, не думаю, что у меня когда-либо было голосование симпатий раньше. Ах, оранжевая полоса гибели .. спускающаяся сверху и информирующая вас о том, сколько людей могут печатать быстрее. И нет, у меня не ушло 5 минут на ввод текста, это была моя собственная вина: я написал половину ответа, отвлекся на IM (да, кажется, у меня концентрация внимания птицы, привлеченной блестящими объектами), погуглил, что означает amp; urlencodes (что, будем честны, заняло считанные секунды), затем написал следующую половину. Так что не стесняйтесь отозвать голосование за симпатию, поскольку это, конечно, была полностью моя собственная вина 😉

Ответ №2:

Он отключается, потому что он обрабатывает amp; в вашем параметре url как фактический разделитель параметров GET, когда это не так.

Вам нужно использовать urlencode() для кодирования вашего URL.

Ответ №3:

Амперсанд используется для разделения параметров во внешней строке запроса. Вам нужно будет закодировать URL-адрес, если вы хотите использовать его в параметре GET.

Ответ №4:

Потому что amp; указывает конец пары ключ / значение в строке запроса.

Используйте urlencode для подготовки данных для включения в строку запроса.

Комментарии:

1. Это ссылка на спам-сайт. Будьте более осторожны.

2. Ого. Исправлена опечатка. На самом деле это не спам-сайт, он ни на что не ссылался в общедоступном DNS. Похоже, что ваш DNS-провайдер отправляет спам-ответ на любое имя хоста, с которым не связан реальный сайт (или который вы перенаправили через поисковую систему)

3. Да, мне просто интересно об этом… Это привело меня к действительно плохому всплывающему сайту, который не хотел, чтобы я уходил. Танцующие киски, бесплатные айпады, целых 9. Я думаю, что я был их миллионным посетителем. Ах, я вижу, он перенаправлен на include .com