как получить параметры POST из URL в PHP [duplicate]

Оператор == проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals() проверьте фактическое содержимое строки (значение).

Обратите внимание, что метод .equals() принадлежит классу Object (суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.

  • Случай 1
    String s1 = "Stack Overflow";
    String s2 = "Stack Overflow";
    s1 == s2;      //true
    s1.equals(s2); //true
    
    Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле.
  • Случай 2
    String s1 = new String("Stack Overflow");
    String s2 = new String("Stack Overflow");
    s1 == s2;      //false
    s1.equals(s2); //true
    
    Причина. Если вы создаете объект String с использованием ключевого слова new, ему выделяется отдельное пространство в куче.
147
задан JakeGould 8 December 2017 в 02:18
поделиться

6 ответов

257
ответ дан JakeGould 6 September 2018 в 02:18
поделиться
261
ответ дан JakeGould 29 October 2018 в 08:56
поделиться

Если у вас возникла проблема с преобразованием строки запроса в массив из-за кодированных амперсандов

&

, то обязательно используйте html_entity_decode

Пример:

// Input string //
$input = 'pg_id=2&parent_id=2&document&video';

// Parse //
parse_str(html_entity_decode($input), $out);

// Output of $out //
array(
  'pg_id' => 2,
  'parent_id' => 2,
  'document' => ,
  'video' =>
)
14
ответ дан Casper Wilkes 16 August 2018 в 03:06
поделиться

Это однострочный синтаксический анализатор для анализа запроса из текущего URL-адреса в массив:

parse_str($_SERVER['QUERY_STRING'], $query);
3
ответ дан hovado 16 August 2018 в 03:06
поделиться

Иногда только parse_str() отмечает точную, он может отображаться, например:

$url = "somepage?id=123&lang=gr&size=300";

parse_str () вернет:

Array ( 
    [somepage?id] => 123 
    [lang] => gr 
    [size] => 300 
)

Лучше было бы объединить parse_str() с parse_url() следующим образом:

$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
47
ответ дан JakeGould 16 August 2018 в 03:06
поделиться
  • 1
    У меня проблема с этим ответом, потому что он не работает, если вы используете один и тот же ключ несколько раз (да, потому что в ключах php-массива уникальны). Таким образом, ?key=lorem&key=ipsum приведет к array(["key"]=>"ipsum"). Вопрос в том, есть ли функция для получения s.th. как array(["key"]=>array("lorem", "ipsum")) или мне нужно создать эту функцию самостоятельно? – MaBi 1 March 2015 в 19:54
  • 2
    Технически PHP также будет рассматривать ?key=lorem&key=ipsum, как если бы вы предоставили key=ipsum, если это была строка запроса в URL-адресе. И я считаю, что считается недействительным, чтобы повторно использовать ключ и ожидать согласованных результатов или что все экземпляры ключа сохраняются. Допустимый подход, по крайней мере для строки запроса, отправленной на PHP, будет ?key[]=lorem&key[]=ipsum, поэтому ваш доморощенный подход может искать любые вхождения &{x}=, где x происходит более одного раза, и заменять на x[] (и обрабатывать? As такой же, как & amp;) – Anthony 11 June 2015 в 07:23
  • 3
    @Mabi - о, и посмотрите, кто-то еще соглашается с вами и уже создал свою собственную функцию - php.net/manual/en/function.parse-str.php#76792 – Anthony 11 June 2015 в 07:31
  • 4
    Это было полезно! Я решил сделать это так ?key[]=lorem&key[]=ipsum несколько недель назад. Но спасибо за обмен ссылками! – MaBi 12 June 2015 в 04:58
  • 5
    Что-то, на что нужно обратить внимание, это строки, которые включают «+», например myemail+alias@gmail.com. Они будут разбираться parse_str в пространстве. key = myemail alias@gmail.com. – dudeman 26 August 2016 в 23:41
  • 6
    Это `parse_str ($ str, $ arr);` и не parse_str($str,&$arr); страшная ошибка – user 5 July 2017 в 00:12
  • 7
    Вы никогда не должны иметь одинаковое имя параметра запроса с разными значениями. Это не имеет смысла, поскольку в любом случае все будут приняты. – Cristian 3 December 2017 в 04:20
  • 8
    @Cristian: «У вас никогда не должно быть одного и того же имени параметра запроса с разными значениями». Вы правы, но в ответе говорится: «... URL-адрес, который функция будет бесшумно терпеть неудачу без возникновения ошибки или исключения». Это может сломать приложение , Хотя этот ответ невелик, он подчеркивает проблему. Особенно, если ваше приложение может быть разбито кем-то, просто произвольно сделав запрос с добавленными дополнительными параметрами. – JakeGould 8 December 2017 в 02:15
  • 9
    Я предполагаю, что он ожидает $_SERVER['QUERY_STRING'] – CpILL 19 December 2017 в 20:17

Использование parse_str() .

$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
28
ответ дан Rocket Hazmat 16 August 2018 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: