Intereting Posts
Отправка объекта Javascript в PHP через Ajax Как установить Laravel 5.0 PHP Regex для строки с буквенно-цифровыми и специальными символами проверьте, не меняется ли переменная Получите звание, основанное на баллах, из неупорядоченной базы данных MySql, когда ему дали имя пользователя Как интегрировать загрузку Blue Imp в CakePHP? Почему ввод php: // может быть прочитан более одного раза, несмотря на то, что документация говорит иначе? PHP include () с атрибутами GET (include file.php? Q = 1) PHP-защита от mysql-инъекций PHP. Каков хороший способ создать короткую буквенно-цифровую строку из длинного хэша md5? Получать папки и файлы рекурсивно из папки в алфавитном порядке в PHP? Как получить базу данных данных без перезагрузки страницы? Удалить все несоответствующие символы в строке PHP? unbindModel вызов в CakePhp. Как это работает? Codeigniter передает данные из контроллера для просмотра

Можно ли сохранить знаки плюса в PHP $ _GET без кодирования?

Скажем, я запрашиваю этот 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()) чтобы снова использовать строку.