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().
Comments