Как избежать возврата php parse_url false при разборе /s?a=12&b=12.3.3.4:1233, у которого есть: в параметрах?

Как избежать возврата php parse_url false при разборе ''/s?a=12&b=12.3.3.4:1233" который имеет ":" в параметрах?

<?php                                                                                                                                                         
var_dump(parse_url('/s?a=12&b=12.3.3.4:1233', PHP_URL_QUERY));

возвращается

bool(false)

Вот результат онлайн-теста:

https://3v4l.org/8LKIV


пока тест хороший в php 7.1.7

print_r(parse_url('/s?a=12&b=12.3.3.4:1233', PHP_URL_QUERY));

вернуть хорошо:

a=12&b=12.3.3.4:1233

person zyfyy    schedule 14.12.2017    source источник


Ответы (1)


В PHP7 вы можете опустить scheme и host, но ниже этой версии вы не можете.

Поэтому вы также должны всегда включать схему и хост.

<?php
echo 'Without scheme and host'.PHP_EOL;
print_r(parse_url('/s?a=12&b=12.3.3.4:1233', PHP_URL_QUERY));

echo PHP_EOL.PHP_EOL;

echo 'With scheme and host'.PHP_EOL;
print_r(parse_url('http://example.com/s?a=12&b=12.3.3.4:1233', PHP_URL_QUERY));

Вывод для версий 7.0.0–7.2.0

Without scheme and host
a=12&b=12.3.3.4:1233

With scheme and host
a=12&b=12.3.3.4:1233

Вывод для версий 5.6.0–5.6.30, hhvm-3.18.5–3.22.0

Without scheme and host



With scheme and host
a=12&b=12.3.3.4:1233

https://3v4l.org/EQhh6

person Lawrence Cherone    schedule 14.12.2017
comment
Хорошее решение! И есть ли способ правильно проанализировать только частичные URL-адреса? - person zyfyy; 14.12.2017
comment
Что ты имеешь в виду? Просто убедитесь, что у вас есть схема и хост, значение может быть поддельным. - person Lawrence Cherone; 14.12.2017
comment
Я узнал об этой проблеме при проверке доменных имен, если вы не добавите схему, для ‹ PHP 5.6.7 будут происходить странные вещи, поэтому я просто добавляю ее для проверки. - person Lawrence Cherone; 14.12.2017
comment
Я имею в виду, как мы можем это исправить, если мы не добавим схему и хост в начало частичной строки URL. - person zyfyy; 14.12.2017
comment
Обновитесь до › PHP 7 :/ или добавьте поддельный. - person Lawrence Cherone; 14.12.2017
comment
На момент написания статьи об этом поведении/изменении не упоминалось в документах PHP - i.imgur.com/ aJ8rkg0.png - person Lawrence Cherone; 14.12.2017
comment
Wired, но я обнаружил, что parse_url упоминается в источнике php-7.1 code файл обновления. Возможно, это было исправлено в php7.1. - person zyfyy; 14.12.2017
comment
Хорошая находка, да, он отлично работает для › PHP7.0, хотя, если вы собираетесь переместить скрипт на сервер с 5.6 и т. д., я рекомендую вам все же сымитировать его, чтобы сделать его более переносимым. - person Lawrence Cherone; 14.12.2017