Как правильно экранировать строку для ссылки mailto? - PullRequest
17 голосов
/ 20 января 2012

У меня есть ссылка mailto: на странице, включающая параметры subject= и body=, но я не уверен, как правильно экранировать данные в параметрах.

Страницакодируется в utf-8, поэтому я думаю, что все специальные символы, такие как немецкие умляуты, должны быть также закодированы в utf-8 представления для URL?

В настоящее время я использую rawurlencode(), поскольку urlencode() вставит+ символов во всех местах, где пробелы должны были быть, но я не уверен, что это правильный способ сделать это.

Ответы [ 3 ]

17 голосов
/ 20 января 2012

Вам просто нужно rawurlencode() ссылка в конце адреса электронной почты в соответствии со стандартами W3C.

В руководстве по PHP есть пример urlencode (найдите mailto на этой странице):http://php.net/manual/en/function.urlencode.php

5 голосов
/ 21 октября 2017

На основании принятых ответов и комментариев я использовал вот что:

function format_text_for_mailto_param($text) {
    return rawurlencode(htmlspecialchars_decode($text));
}

Пример:

$email = "someone@example.org";
$subject = "Test Subject";
<a href="mailto:' . $email . '?subject=' . format_text_for_mailto_param($subject) . '">send email</a>
0 голосов
/ 01 июля 2015
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.\"very@\ \"very\".unusual"', 'test.com', ['subject'=>'this & \ that / ']));
print (MailToLink('müller', 'test.com', ['subject'=>'Einflußgröße']));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...