Я создаю страницу поиска, на которой вы вводите поисковый запрос, и форма отправляется на search.php?query=your query
. Какая функция PHP является лучшей и что я должен использовать для кодирования/декодирования поискового запроса?
Как правильно URL кодировать строку в PHP?
Ответ 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()
.
Тестовый пример
- Запустите код на тестовом сайте PHP (есть ли канонический, который я должен упомянуть здесь?)
- Нажмите на ссылку
- Отправьте электронное письмо
- Получить письмо
- Нажмите на эту ссылку
Вы должны увидеть:
"args": {
"token": "w%a&!e#\"^2(^@azW"
},
И, конечно, это JSON-представление $token
выше.
Ответ 4
Вы можете использовать функции кодирования URL. PHP имеет
rawurlencode()
функция
ASP имеет
Server.URLEncode()
функция
В JavaScript вы можете использовать
encodeURIComponent()
функция.