Скажем, я запрашиваю этот URL:
http://mydomain.com/script.php?var=2+2
$ _GET ['var'] теперь будет: «2 2», где должно быть «2 + 2»,
Очевидно, я мог кодировать данные перед отправкой, а затем декодировать их, но мне интересно, является ли это единственным решением. Я мог бы также заменить пробелы символами плюс, но я хочу также разрешить пробелы. Я просто хочу, чтобы любые символы были переданы без каких-либо расшифровки или кодировки url. Спасибо!
Конечно. Вы можете прочитать $_SERVER["QUERY_STRING"]
, разбить его самостоятельно, а затем отказаться от обычного декодирования URL-адресов или только конвертировать %xx
обратно.
preg_match_all('/(\w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $pairs); $_GET = array_combine($pairs[1], $pairs[2]);
(Пример работает только для буквенно-цифровых параметров и не выполняет упомянутое декодирование% xx. Просто разрывает исходный вход.)
if(strpos($_SERVER["QUERY_STRING"], "+") !== false){ $_SERVER["QUERY_STRING"] = str_replace("+", "%2B", $_SERVER["QUERY_STRING"]); parse_str($_SERVER["QUERY_STRING"], $_GET); }
Вы можете использовать urlencode
, хотя это также переводит любые пробелы в плюс. Это имеет смысл, потому что +
в URL обычно представляет собой пробел. Если вам действительно нужен знак «плюс», означающий знак «плюс», вы, вероятно, должны избегать ввода. Это означает, что +
станет %2B
а ваш URL будет http://mydomain.com/script.php?var=2%2B2
.
Кто-то генерирует URL-адрес, содержащий +
в сегменте запроса, является неправильным, если только они не намерены представлять символ пробела. A +
в запросе является зарезервированным символом (re: RFC2396 §3.4 ). Если вам нужно вставить литерал +
в строку запроса, он должен быть закодирован как %2B
(re: RFC2396 §2.2 ).
Для справок в будущем вы можете сделать символ «+» отображаться в запросе на получение без необходимости отправки url с закодированными символами.
PHP Version 5.3.8
Отправка http://mydomain.com/script.php?var=2+2
Эхо:
2+2
Используя следующий код:
<?php echo urlencode($_GET['var']); ?>
Для этого требуется несколько шагов.
Просто замените свой параметр запроса плюс (+) знаком «% 2B» в URL-адресе перед запросом URL-адреса.
Теперь вы просто получите параметр запроса. Он автоматически заменит «% 2B» знаком «плюс».
Я просто использовал urlencode()
для корректного кодирования URL и urldecode($_Get())
чтобы снова использовать строку.