Как правильно URL кодировать строку в PHP? - PullRequest
83 голосов
/ 20 января 2011

Я создаю страницу поиска, где вы вводите поисковый запрос, и форма отправляется на search.php?query=your query. Какая функция PHP является лучшей и которую я должен использовать для кодирования / декодирования поискового запроса?

Ответы [ 4 ]

162 голосов
/ 20 января 2011

Для запроса URI используйте urlencode / urldecode;для всего остального используйте rawurlencode / rawurldecode.

Разница между urlencode и rawurlencode заключается в том, что

19 голосов
/ 20 января 2011

Хитро названные urlencode () и urldecode () .

Однако вам не нужно использовать urldecode() для переменных, которые появляются в$_POST и $_GET.

7 голосов
/ 15 января 2018

Вот мой вариант использования, который требует исключительного количества кодирования. Может быть, вы думаете, что это придумано, но мы запускаем это на производстве. По совпадению, это относится ко всем типам кодирования, поэтому я выкладываю как учебное пособие.

Описание варианта использования

Кто-то только что купил предоплаченную подарочную карту ("токен") на нашем сайте. Токены имеют соответствующие URL для их погашения. Этот клиент хочет отправить это по электронной почте кому-то еще. Наша веб-страница содержит ссылку mailto, которая позволяет им делать это.

PHP код

// The order system generates some opaque token
$token = 'w%a&!e#"^2(^@azW';

// Here is a URL to redeem that token
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token);

// Actual contents we want for the email
$subject = 'I just bought this for you';
$body = 'I just bought a widget for you. Please enter your shipping details here: ' . $redeemUrl;

// A URI for the email as prescribed
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body);

// Print an HTML element that links to that page
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';

Примечание. Приведенное выше предполагает, что вы выводите документ text/html. Если тип выходного носителя text/json, просто используйте $retval['url'] = $mailToUri;, поскольку выходное кодирование обрабатывается json_encode().

Контрольный пример

  1. Запустите код на тестовом сайте PHP ( есть ли канонический, который я должен упомянуть здесь? )
  2. Нажмите на ссылку
  3. Отправить письмо
  4. Получить письмо
  5. Нажмите на эту ссылку

Вы должны увидеть:

"args": {
  "token": "w%a&!e#\"^2(^@azW"
}, 

И, конечно, это JSON-представление $token выше.

0 голосов
/ 29 апреля 2019

Вы можете использовать функции кодирования URL. PHP имеет функцию

rawurlencode() 

ASP имеет функцию

Server.URLEncode() 

В JavaScript выможно использовать функцию

encodeURIComponent() 

.

...