Вот мой вариант использования, который требует исключительного количества кодирования. Может быть, вы думаете, что это придумано, но мы запускаем это на производстве. По совпадению, это относится ко всем типам кодирования, поэтому я выкладываю как учебное пособие.
Описание варианта использования
Кто-то только что купил предоплаченную подарочную карту ("токен") на нашем сайте. Токены имеют соответствующие 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()
.
Контрольный пример
- Запустите код на тестовом сайте PHP ( есть ли канонический, который я должен упомянуть здесь? )
- Нажмите на ссылку
- Отправить письмо
- Получить письмо
- Нажмите на эту ссылку
Вы должны увидеть:
"args": {
"token": "w%a&!e#\"^2(^@azW"
},
И, конечно, это JSON-представление $token
выше.