Каков правильный способ избежать строки для ссылки mailto
У меня есть ссылка mailto:
на странице, включая параметры subject=
и body=
, но я не уверен, как правильно избежать данных в параметрах.
Страница закодирована в utf-8
, поэтому я думаю, что все специальные символы, такие как немецкие умлауты, должны быть закодированы в представлениях utf-8
для URL-адреса тоже?
В данный момент я использую rawurlencode()
, поскольку urlencode()
будет вставлять символы +
во все местоположения, где должны были быть пробелы, но я не уверен, что это правильный способ сделать это.
Ответы
Ответ 1
Вам просто нужно rawurlencode()
ссылку в конце адреса электронной почты в соответствии со стандартами W3C.
В Руководстве по PHP для urlencode есть пример (выполните поиск mailto на этой странице):
http://php.net/manual/en/function.urlencode.php
Ответ 2
Основываясь на принятых ответах и комментариях, это то, что я использовал:
function format_text_for_mailto_param($text) {
return rawurlencode(htmlspecialchars_decode($text));
}
Пример:
$email = "[email protected]";
$subject = "Test Subject";
<a href="mailto:' . $email . '?subject=' . format_text_for_mailto_param($subject) . '">send email</a>
Ответ 3
function MailToUrl ($strUser, $strServer, $queryParams = null) {
$strUrl = 'mailto:' . rawurlencode($strUser) . '@' . rawurlencode($strServer);
if ($queryParams) {
$strUrl .= '?' . http_build_query($queryParams, null, null, PHP_QUERY_RFC3986);
}
return $strUrl;
}
function MailToLink ($strUser, $strServer, $queryParams = null) {
$strUrl = MailToUrl($strUser, $strServer, $queryParams);
$strEscapedUrl = htmlspecialchars($strUrl);
$strVisibleUrl = htmlspecialchars(rawurldecode($strUrl));
$strLink = "<a href='{$strEscapedUrl}'>{$strVisibleUrl}</a>";
return $strLink;
}
print (MailToLink('"very.(),:;<>[]\".VERY.\"[email protected]\ \"very\".unusual"', 'test.com', ['subject'=>'this & \ that / ']));
print (MailToLink('müller', 'test.com', ['subject'=>'Einflußgröße']));