事件:
用mailto链接,调用邮件客户端,发送邮件
发送给多人,并要显示收件人的姓名
问题:
使用<a href="mailto:a@126.com;dd@126.com">点击1</a>都是可以的
带上姓名以后:
使用<a href="mailto:fff<jessie@126.com>;<zhi@126.com>">点击1</a>雷鸟可以,outlook express只显示第一个收件人
改成:
使用<a href="mailto:?to=fff<jessie@126.com>&to=ddd<zhi@126.com>">点击2</a>可以
带上中文以后:
使用<a href="mailto:?to=你好<jessie@126.com>&to=使得<zhi@126.com>">点击2</a>乱码
处理乱码:(outlook使用gbk编码)
$str = '?to=你好<jessie@126.com>&to=使得<zhi@126.com>';
使用<a href="mailto:urlencode(iconv('utf8', 'gb2312', $str))">点击2</a>把前面的‘?to=你好’都作为姓名了
最后改成:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$str = '?to='.urlencode(iconv('utf8', 'gb2312', '你好')).'<jessie@126.com>'.'&to='.urlencode(iconv('utf8', 'gb2312', '使得')).'<aaa@126.com>';
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于urlencode(),符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的,即要把特殊字符转化成url编码。
字符 特殊字符的含义 URL编码
# 用来标志特定的文档位置 %23
% 对特殊字符进行编码 %25
& 分隔不同的变量值对 %26
+ 在变量值中表示空格 %2B
\ 表示目录路径 %2F
= 用来连接键和值 %3D
? 表示查询字符串的开始 %3F
解决:
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<?php
if(strpos($_SERVER['HTTP_USER_AGENT'],'Linux')){/*utf8*/
$str = '?to=你好<jessie@126.com>'.'&to=似的<aaa@126.com>';
}else{/*gbk*/
$str = '?to='.urlencode(iconv('utf8', 'gb2312', '你好')).'<jessie@126.com>'.'&to='.urlencode(iconv('utf8', 'gb2312', '使得')).'<aaa@126.com>';
}
?>
<a href="mailto:<?php echo $str;?>">点击</a>
后续:
变态,搞了半天自己调试的居然是outlook express,这种方法在outlook下又不适用......