Подтвердить что ты не робот

Как правильно URL кодировать строку в PHP?

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

4b9b3361

Ответ 1

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

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

  • urlencode кодирует в соответствии с application/x-www-form-urlencoded (пробел закодирован с помощью +), а
  • rawurlencode кодируется в соответствии с простым Percent-Encoding (пробел кодируется с помощью %20).

Ответ 2

Уклонно названный urlencode() и urldecode().

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

Ответ 3

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

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

Кто-то только что купил предоплаченную подарочную карту ("токен") на нашем сайте. Токены имеют соответствующие URL для их погашения. Этот клиент хочет отправить 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 = '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 with that mailto link
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 выше.

Ответ 4

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

rawurlencode() 

функция

ASP имеет

Server.URLEncode() 

функция

В JavaScript вы можете использовать

encodeURIComponent() 

функция.