就收件人乱码 php发送邮件,从数据库里拿出收件人,发送邮件后在邮件的收件人那行都是乱码而信件内容和信件标题不是,这是从页面上输入的该怎么解决呢? 愁死我了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 开始的时候从数据库里拿出来收件人是乱码,加一句mysql_query("SET NAMES UTF8");拿出来的数据不乱了,可是执行发信函数到油箱里后收件人就全乱码了 你是不是用 phpmailer,,直接去那类里面改unicode为utf8 $name=iconv('utf-8','gb2312',$收件人);//utf-8改为你数据库编码,gb2312改位你面页编码 没有,数据库里我都改成utt-8了,我用的mail函数mail($to, $subj, $cal_msg, $header, "")发的,有什么不妥的地方吗? 还是不行,收件人列表是$toname 是Mary <[email protected]>, Kelly <[email protected]>形式的$name=iconv('utf-8','gb2312',$toname);$header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/calendar;method=REQUEST";这样写有什么错误吗 是乱码,是不是outlook的事?我从outlook拿数据到数据库,数据库里的数据乱码了,正常数据发邮件,名字也乱码了 $name=iconv('utf-8','gb2312',$toname);中文的话,还是转gb2312吧,,我也遇到过这个问题. $name=iconv('utf-8','gb2312',$toname); $header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/calendar;method=REQUEST";header('Content-Type:text/html;charset=gb2312');//加上字头试试 header('Content-Type: text/html; charset=utf-8');mysql_query(set names utf8); 上面的写错了,忘了引号header('Content-Type: text/html; charset=utf-8');mysql_query("set names utf8"); To: =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= <[email protected]>, =?utf-8?B?TExD5LqV5LiKIOeroA==?= <[email protected]>, =?utf-8?B?TExD5LqU5Y2B5bWQ5paH5ZKM?= <[email protected]>, =?utf-8?B?UFPmnb7mnKzoi7HpmoY=?= <[email protected]>, =?utf-8?B?UFPopb/jgIDpm4XlvaY=?= <[email protected]>, =?utf-8?B?UFPol6TkupXoi7HlvrM=?= <[email protected]>, =?utf-8?B?UFPpvYvol6Tml6XntbHnvo4=?= <[email protected]>, =?utf-8?B?Q0Qg5p2cIOadseayog==?= <[email protected]>, =?utf-8?B?Q0Tlrokg55Gb5aay?= <[email protected]>, =?utf-8?B?Q0Tnjosg5pil6Zye?= <[email protected]>, =?utf-8?B?Q0TlvpAg6JmO?= <[email protected]>, =?utf-8?B?Q0Tppqwg546y546y?= <[email protected]>, =?utf-8?B?Q0Tppqwg6I6J?= <[email protected]>, =?utf-8?B?Q0TnjJsg57+g5aif?= <[email protected]>, =?utf-8?B?Q0Tmu5XkuabmiJA=?= <[email protected]>找了下邮件里的头文件是这样写的,我是不是跟据这个写啊?但是中间那些字母到底是什么啊,是不是根据人的名字生成的什么码? 我的计算机系统是日语的,页面是日语的,outlook是汉语的,mysql,php是英语的出现乱码是哪个环节不知道,是不是outlook的原因呢,我从outlook取出的数据是乱码,写进去也是乱码(只是收件人) 以 =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= 为例.<?php$a = '=?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?=';$b = explode('?', $a);header("Content-Type:text/html; charset=".$b[1].";");var_dump($b);var_dump(base64_decode($b[3]));exit; 你先写个测试程序,收件人,内容都写成固定的,然后发信.看看结果.一般outlook看到乱码,在outlook里改变编码就可以了,默认的是西欧iso的.为什么,人家发送的邮件是正常的呢.如23楼所示,在邮件里指明了utf8,并且用base64加密,这样outlook就不会使用默认的去读了.这是关键之处.建议楼主解决完问题以后,多了解一下mail的规范. 谢谢楼上27,28楼有耐心的回答,我改成了固定的人名也是乱码,23楼的写法我不知道怎么具体对应到我的代码中<?phpheader("content-type:text/html;charset=Shift-JIS");//header('Content-Type:text/html;charset=gb2312');// session_start(); $conn = @ mysql_connect("localhost", "root", "") or die("データベース連接エラー"); if($conn) mysql_select_db("business",$conn);/*function ckcount(){ $count=0; foreach($_POST['ck'] as $v){ $count ++;}return $count;}if (ckcount()==0){echo '<script>;alert("Please choose receiver")</script>;';}*/function getsql(){ //error_reporting(E_ALL);if ( in_array( '99', $_POST[ 'ck' ] ) ){ $Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";}else{$Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";$index = 0;foreach($_POST['ck'] as $v){ if($index == 0) $Sql.= " and StaffType = '$v'"; else $Sql.= "or StaffType ='$v'"; $index ++;}}return $Sql;}$Sql=getsql();mysql_query("SET NAMES UTF8");$ResultMailAdd=mysql_query($Sql);$to="";$toname="";$cout=0;while($mailAdd = mysql_fetch_array($ResultMailAdd)) { if ($cout==0) { $to= $mailAdd[MailAdd]; $toname= $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>'; } else { $to.= ',' . $mailAdd[MailAdd]; $toname.= ',' . $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>'; } $cout++; }echo $toname; $from = $_SESSION['MailAddress']; $subj =$_POST["Subject"];// "my test subject"; $msg =$_POST["Body"];// "this is the email body"; $location=$_POST["Location"];// $starttime=$_POST["StartTime"];$endtime=$_POST["EndTime"];//$name=iconv('utf-8','Shift-JIS',$toname);$name=iconv('utf-8','gb2312',$toname);echo $name;$header = 'To:' . $toname . "\r\n"; $header .= "From: " . $from . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/calendar;method=REQUEST"; //Various ways to creat a new, random UID $cal_uid = "{" . uniqid(mt_rand(), true) . "}"; $cal_uid = "{" . date('Ymd').'T'.date('His')."-".rand()."@mydomain.com}"; // $cal_uid = com_create_guid(); $cal_msg ="BEGIN:VCALENDARPRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//ENVERSION:2.0METHOD:REQUESTBEGIN:VEVENTORGANIZER:MAILTO:DTSTART:" . $starttime . "DTEND:" . $endtime . "UID:" . $cal_uid . "LOCATION:" . $location . "TRANSP:OPAQUESEQUENCE:0DTSTAMP:20060309T045649ZCATEGORIES: MeetingDESCRIPTION:" . $msg . "SUMMARY:" . $subj . "PRIORITY:5X-MICROSOFT-CDO-IMPORTANCE:1CLASS:PUBLICBEGIN:VALARMTRIGGER:-PT3DACTION:DISPLAYDESCRIPTION:ReminderEND:VALARMBEGIN:VTIMEZONETZID:US/CentralEND:VTIMEZONEEND:VEVENTEND:VCALENDAR"; if (mail($to, $subj, $cal_msg, $header, "")) { echo "mail sent"; }mysql_close($conn); ?> $headers = 'To: "=?utf-8?B?' . base64_encode("测试") . '?=" <[email protected]> '. "\r\n";$headers = 'From: "=?utf-8?B?' . base64_encode("测试") . '?=" <[email protected]> '. "\r\n";像这样,确定取出来的数据为utf-8,然后将数据用base64编码. 求mysql一条命令,距离现在N天怎么写? MYSQL并发的问题 今天去面试php程序员,有一道填空题,尼玛... 各位大大一起来帮忙看一下! windows 2003 server配置php的问题,恳请帮忙说一下 php变量 【原创】求兼职做一自助建站系统,要求3日完成. preg_match_all()小问题不明白求解决! 今天用zend加秘了一个文件,传到买的服务器上时,一切正常,可是在本机上就不行了 请问如何在网页上打开显示CAD图纸? php与oracle连接 web上出这个问题
$name=iconv('utf-8','gb2312',$收件人);//utf-8改为你数据库编码,gb2312改位你面页编码
$name=iconv('utf-8','gb2312',$toname);
$header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: text/calendar;method=REQUEST";
这样写有什么错误吗
中文的话,还是转gb2312吧,,我也遇到过这个问题.
$name=iconv('utf-8','gb2312',$toname); $header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/calendar;method=REQUEST";
header('Content-Type:text/html;charset=gb2312');//加上字头试试
header('Content-Type: text/html; charset=utf-8');
mysql_query(set names utf8);
mysql_query("set names utf8");
To: =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= <[email protected]>,
=?utf-8?B?TExD5LqV5LiKIOeroA==?= <[email protected]>,
=?utf-8?B?TExD5LqU5Y2B5bWQ5paH5ZKM?= <[email protected]>,
=?utf-8?B?UFPmnb7mnKzoi7HpmoY=?= <[email protected]>,
=?utf-8?B?UFPopb/jgIDpm4XlvaY=?= <[email protected]>,
=?utf-8?B?UFPol6TkupXoi7HlvrM=?= <[email protected]>,
=?utf-8?B?UFPpvYvol6Tml6XntbHnvo4=?= <[email protected]>,
=?utf-8?B?Q0Qg5p2cIOadseayog==?= <[email protected]>,
=?utf-8?B?Q0Tlrokg55Gb5aay?= <[email protected]>,
=?utf-8?B?Q0Tnjosg5pil6Zye?= <[email protected]>,
=?utf-8?B?Q0TlvpAg6JmO?= <[email protected]>,
=?utf-8?B?Q0Tppqwg546y546y?= <[email protected]>,
=?utf-8?B?Q0Tppqwg6I6J?= <[email protected]>,
=?utf-8?B?Q0TnjJsg57+g5aif?= <[email protected]>,
=?utf-8?B?Q0Tmu5XkuabmiJA=?= <[email protected]>
找了下邮件里的头文件是这样写的,我是不是跟据这个写啊?但是中间那些字母到底是什么啊,是不是根据人的名字生成的什么码?
outlook是汉语的,mysql,php是英语的出现乱码是哪个环节不知道,是不是outlook的原因呢,
我从outlook取出的数据是乱码,写进去也是乱码(只是收件人)
以 =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= 为例.
<?php$a = '=?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?=';$b = explode('?', $a);
header("Content-Type:text/html; charset=".$b[1].";");
var_dump($b);
var_dump(base64_decode($b[3]));
exit;
一般outlook看到乱码,在outlook里改变编码就可以了,默认的是西欧iso的.为什么,人家发送的邮件是正常的呢.如23楼所示,在邮件里指明了utf8,并且用base64加密,这样outlook就不会使用默认的去读了.这是关键之处.建议楼主解决完问题以后,多了解一下mail的规范.
<?phpheader("content-type:text/html;charset=Shift-JIS");
//header('Content-Type:text/html;charset=gb2312');// session_start(); $conn = @ mysql_connect("localhost", "root", "") or die("データベース連接エラー");
if($conn) mysql_select_db("business",$conn);
/*
function ckcount(){
$count=0;
foreach($_POST['ck'] as $v)
{
$count ++;
}
return $count;
}if (ckcount()==0)
{echo '<script>;alert("Please choose receiver")</script>;';}
*/function getsql(){
//error_reporting(E_ALL);if ( in_array( '99', $_POST[ 'ck' ] ) )
{
$Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";
}
else{
$Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";
$index = 0;
foreach($_POST['ck'] as $v)
{
if($index == 0)
$Sql.= " and StaffType = '$v'";
else
$Sql.= "or StaffType ='$v'";
$index ++;
}
}
return $Sql;
}
$Sql=getsql();mysql_query("SET NAMES UTF8");$ResultMailAdd=mysql_query($Sql);$to="";
$toname="";
$cout=0;
while($mailAdd = mysql_fetch_array($ResultMailAdd))
{
if ($cout==0)
{
$to= $mailAdd[MailAdd];
$toname= $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>';
}
else
{
$to.= ',' . $mailAdd[MailAdd];
$toname.= ',' . $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>';
}
$cout++;
}
echo $toname;
$from = $_SESSION['MailAddress'];
$subj =$_POST["Subject"];// "my test subject";
$msg =$_POST["Body"];// "this is the email body";
$location=$_POST["Location"];//
$starttime=$_POST["StartTime"];
$endtime=$_POST["EndTime"];
//$name=iconv('utf-8','Shift-JIS',$toname);
$name=iconv('utf-8','gb2312',$toname);
echo $name;
$header = 'To:' . $toname . "\r\n"; $header .= "From: " . $from . "\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: text/calendar;method=REQUEST"; //Various ways to creat a new, random UID
$cal_uid = "{" . uniqid(mt_rand(), true) . "}";
$cal_uid = "{" . date('Ymd').'T'.date('His')."-".rand()."@mydomain.com}";
// $cal_uid = com_create_guid(); $cal_msg =
"BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER:MAILTO:
DTSTART:" . $starttime . "
DTEND:" . $endtime . "
UID:" . $cal_uid . "
LOCATION:" . $location . "
TRANSP:OPAQUE
SEQUENCE:0
DTSTAMP:20060309T045649Z
CATEGORIES: Meeting
DESCRIPTION:" . $msg . "
SUMMARY:" . $subj . "
PRIORITY:5
X-MICROSOFT-CDO-IMPORTANCE:1
CLASS:PUBLIC
BEGIN:VALARM
TRIGGER:-PT3D
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
BEGIN:VTIMEZONE
TZID:US/Central
END:VTIMEZONE
END:VEVENT
END:VCALENDAR"; if (mail($to, $subj, $cal_msg, $header, ""))
{
echo "mail sent";
}
mysql_close($conn); ?>
$headers = 'From: "=?utf-8?B?' . base64_encode("测试") . '?=" <[email protected]> '. "\r\n";
像这样,确定取出来的数据为utf-8,然后将数据用base64编码.