繁体   English   中英

为mailto链接转义字符串的正确方法是什么

[英]What is the correct way to escape a string for a mailto link

我在这里的页面中有一个mailto:链接,其中包括subject=body=参数,但是我不确定如何正确转义参数中的数据。

该页面以utf-8编码,因此我想所有特殊字符(例如德国变音符)也应编码为URL的utf-8表示形式吗?

目前,我正在使用rawurlencode()因为urlencode()会在所有应该有空格的位置插入+字符,但是我不确定这是否是正确的方法。

您只需要根据W3C标准在电子邮件地址末尾处rawurlencode()链接即可。

PHP手册上有一个有关urlencode的示例(在该页面上搜索mailto): http : //php.net/manual/en/function.urlencode.php

根据接受的答案及其评论,这是我使用的:

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>
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']));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM