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

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

3 ответов


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

разницу между urlencode и rawurlencode это


хитро названный 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().