我在这里的页面中有一个mailto:
链接,包括subject=
和body=
参数,但我不确定如何正确转义参数中的数据。
该页面以utf-8
编码,所以我猜所有像德语变音符号这样的特殊字符也应该编码为URL的utf-8
表示形式?
目前我正在使用rawurlencode()
,因为urlencode()
会在空格本应存在的所有位置插入+
个字符,但我不确定这是否是正确的方法如此。
答案 0 :(得分:17)
根据W3C标准,您只需要rawurlencode()
电子邮件地址末尾的链接。
在PHP手册中有一个关于urlencode的例子(在该页面上搜索mailto): http://php.net/manual/en/function.urlencode.php
答案 1 :(得分:5)
根据已接受的答案及其评论,这就是我所使用的:
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>
答案 2 :(得分:0)
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']));