Как правильно URL кодировать строку в PHP?
Я делаю страницу поиска, где вы вводите поисковый запрос и форма представления search.php?query=your query
. Какая функция PHP является лучшей и что я должен использовать для кодирования / декодирования поискового запроса?
3 ответов
для запроса URI используйте urlencode
/urldecode
; для чего-нибудь еще используйте rawurlencode
/rawurldecode
.
разницу между urlencode
и rawurlencode
это
-
urlencode
кодирует по данным application / x-www-form-urlencoded (пробел кодируется с+
), а -
rawurlencode
кодирует по равнина Процент-Кодирование (пробел кодируется с%20
).
хитро названный urlencode () и urldecode().
однако вам не нужно использовать urldecode()
по переменным, которые появляются в $_POST
и $_GET
.
вот мой вариант использования, который требует исключительных объем кодирования. Может быть, вы думаете, что это надуманно, но мы запускаем это на производстве. По совпадению, это охватывает каждый тип кодировки, поэтому я публикую в качестве учебника.
в случае
кто-то только что купил предоплаченную подарочную карту ("токен") на нашем сайте. Токены имеют соответствующие 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()
.