php中不转义中文字符的 json 编码方法
虽说最新的 PHP 5.4 已经良好支持 JSON 中文编码,即通过 JSON_UNESCAPED_UNICODE 参数,例如:
json_encode("中文", JSON_UNESCAPED_UNICODE)对于早前 PHP 版本,处理不转义中文字符的 json 编码
PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持。主要包括 JSON 编码和解码两个函数:
json_endoce: http://cn.php.net/json_encode
json_dedoce: http://cn.php.net/json_decodejson_encode
— 对变量进行 JSON 编码,并返回 value 值的 JSON 形式,例如:
代码如下 | 复制代码 |
<?php |
以上代码执行后输出:
代码如下 | 复制代码 |
{"a":1,"b":2,"c":3,"d":4,"e":5} |
假如要编码的数据源(一般是一个数组),value 中包含中文,经过 json_encode 处理后输出的是 unicode 编码。
代码如下 | 复制代码 |
<?php |
以上代码执行后输出:
代码如下 | 复制代码 |
{"a":"u8292u679Cu5C0Fu7AD9"} |
PHP 底层已经做了 unicode 处理,如果嫌它不够直观,可以利用 urlencode 和
urldecode
方法绕过这个转码为 unicode 的过程:
代码如下 | 复制代码 |
$arr = array ('a'=>urlencode('芒果小站')); {"a":"芒果小站"} ,这里分享个更完美的方法: /** $str = json_encode($arr); return preg_replace($search, $replace, $str); } |
利用php mail函数发送
使用mail()函数发送邮件,就必须要有一台不需要验证的SMTP服务器。
这样的话配置工作会多一点,但是使用的时候就比较省事了,几行代码就可以
代码如下 | 复制代码 |
$to = "test@163.com"; |
JMail发送邮件
账号必须有smtp发信权限,最好设置$jmail->silent=true,不让jmail自行抛出错误信息。
常用的有网易、sogou、QQ、GMail邮箱。
代码如下 | 复制代码 |
<?php |
发信账号必须有smtp发信权限,对于网易的邮箱,06年后注册的新邮箱好像不行,早期的倒可以。
还有,最好设置$jmail->silent=true,不让jmail自行抛出错误信息,在设置正常的时候,频繁发信会出现一些错误,据我估计应该是发信服务器设置了发信时间间隔。
phpmailer发送邮件,这个是相当简单的也是常用的
代码如下 | 复制代码 |
|
PHPMailer的主要功能特点:
1.支持邮件 s/mime加密的数字签名
2.支持邮件多个 TOs, CCs, BCCs and REPLY-TOs
3.可以工作在任何服务器平台,所以不用担心WIN平台无法发送邮件的问题的
4.支持文本/HTML格式邮件
5.可以嵌入image图像
6.对于邮件客户端不支持HTML阅读的进行支持
7.功能强大的发送邮件调试功能debug
8.自定义邮件header
9.冗余SMTP服务器支持
10.支持8bit, base64, binary, and quoted-printable 编码
11.文字自动换行
12.支持多附件发送功能
13.支持SMTP服务器验证功能
14.在Sendmail, qmail, Postfix, Gmail, Imail, Exchange 等平台测试成功
15.提供的下载文件中,包括内容详细的说明文档及示例说明,所以不用担心难于上手的问题!
16.PHPMailer 非常小巧、简单、方便、快捷
代码如下 | 复制代码 |
<?php $config = array( $mail = new PHPMailer(); $mail->From = $config['from']; $mail->Username = $config['user']; $mail->Subject=$subject;
if(!$mail->Send()) |
代码如下 | 复制代码 |
require_once('include/PHPMailer/class.phpmailer.php'); //导入PHPMAILER类 $mail = new PHPMailer(); //创建实例 $mail -> CharSet='utf-8'; //设置字符集 $mail -> SetLanguage('ch','include/PHPMailer/language/'); //设置语言类型和语言文件所在目录 $mail -> IsSMTP(); //使用SMTP方式发送 $mail -> SMTPAuth = true; //设置服务器是否需要SMTP身份验证 $mail -> Host = SMTP_SERVER; //SMTP 主机地址 $mail -> Port = SMTP_SERVER_PORT; //SMTP 主机端口 $mail -> From = SMTP_USER_MAIL; //发件人EMAIL地址 $mail -> FromName = 'jasonxu'; //发件人在SMTP主机中的用户名 $mail -> Username = SMTP_USER_NAME; //发件人的姓名 $mail -> Password = SMTP_USER_PASS; //发件人在SMTP主机中的密码 $mail -> Subject = '测试邮件的标题'; //邮件主题 $mail -> AltBody = 'text/html'; //设置在邮件正文不支持HTML时的备用显示 $mail -> Body = '测试邮件的内容';//邮件内容做成 $mail -> IsHTML(true); //是否是HTML邮件 $mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名 $mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回复时回复给的地址和姓名 $mail -> AddAttachment('include/id.csv','att.csv');//附件的路径和附件名称 if(!$mail -> Send()) //发送邮件 var_dump($mail -> ErrorInfo); //查看发送的错误信息 |
注意:phpmailer如果添加附件的时候,在附件名称里一定要写明附件的后缀,如果不写明附件后缀,默认的附件后缀会是.txt。
比如$mail -> AddAttachment('include/id.csv','att');//附件的路径和附件名称
如果向上面一样添加附件发送,则最终接到的附件可能是att.txt。
AddAttachment可以设置附件编码方式和附件类型,比如上面的附件添加也可以设置为
$mail -> AddAttachment('include/id.csv','att.csv',"binary","text/comma-separated-values");//附件的路径和附件名称、
附件的编码方式大概有这么几种:支持8bit, base64, binary, and quoted-printable 编码
而CSV可接受的MIME Type
· application/octet-stream
· text/comma-separated-values(推荐)
· text/csv
所以,csv格式文件的附件类型可以是上面三种中的任意一种
/*PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括:
*.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址
*.支持多种邮件编码包括:8bit,base64,binary和quoted-printable
*.支持SMTP验证
*.支持冗余SMTP服务器
*.支持带附件的邮件和Html格式的邮件
*.自定义邮件头
*.支持在邮件中嵌入图片
*.调试灵活
*.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等
*.可运行在任何平台之上
phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、富文本内容,上传附件,.....
官方网站:http://phpmailer.worxware.com/
下载地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
*/
一个客户的PHP网站需要一个邮件订阅功能,我采用一个在PHP开源程序中被大量使用的程序 PHPmailer(PHPMailer_v2.0.4),在正确填写examples文件夹下的test_mail.php后测试邮件系统,被测试邮箱 可以收到邮件,不过title标题却一直是乱码,故想到这个肯定是PHP的编码问题,经过多次调试终于找到解决办法:核心问题就是加 入$mail->CharSet = "UTF-8";以下是个人测试成功的phpmailer邮件系统
1.对于所有的网易的邮箱(163.com,126.com,yeah.net等),一旦发送中文(标题和正文)都会出现乱码;
2.还有,别的邮箱在发中文时,正文都能正常显示,而标题还出现乱码;
实例:
test.php
代码如下 | 复制代码 |
<html> <body> <h3>phpmailer Unit Test</h3> 请你输入<font color="#FF6666">收信</font>的邮箱地址: <form name="phpmailer" action="send.php" method="post"> <input type="hidden" name="submitted" value="1"/> 邮箱地址: <input type="text" size="50" name="address" /> <br/> <input type="submit" value="发送"/> </form> </body> </html> |
send.php
代码如下 | 复制代码 |
<?php $mail->From = ""; //$mail->WordWrap = 50; // set word wrap to 50 characters $mail->Subject = "PHPMailer测试邮件"; if(!$mail->Send()) echo "Message has been sent"; |
解决方法一
$mail = new PHPMailer();
$mail->CharSet = "GB2312"; // 设置字符集编码 utf-8
$mail->Encoding = "base64";//设置文本编码方式
如果标题错误可
$mail->Subject = "=?UTF-8?B?" . base64_encode("我的邮件") . "?=";
相关文章
js URLdecode()与urlencode方法支持中文解码
下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04