字符集utf-8 gb2312 gbk在所有程序中不区分大小写,推荐小写
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
通过iconv函数实现编码转换
iconv ( string in_charset, string out_charset, string str )
如:iconv("GB2312","UTF-8",$text);
注意:如果网页编码与参数out_charset相同,就没必要用iconv()函数,否则就会出现不可预知的错误(如中文汉字转不出来)
如:imagettftext()函数只支持utf-8字符集
header("content-type:text/html; charset=utf-8");
连接数据库:mysql_query("SET NAMES UTF8")
<?php
$conn=mysql_connect("localhost","root","111") or dir("服务器连接失败".mysql_error()); //连接数据库服务器
mysql_select_db("db_database20",$conn) or die("数据库连接失败".mysql_error()); //连接db_database18
mysql_query("set names utf8"); //设置数据库编码格式
?>
避免截取中文字符串时出现乱码
string mb_substr ( string str, int start [, int length [, string encoding]] )
设置数据库默认字符集和校对方式:
CREATE TABLE [IF NOT EXISTS] 表名称 type=myisam default character set gbk collate gbk_chinese_ci;
CREATE TABLE [IF NOT EXISTS] 表名称 type=myisam default character set utf8 collate utf8_general_ci;
处理中文字符
对于以上的字符串函数,有些可以用于中文,但有些却不适用中文。
所以, PHP 提供了专门的函数来解决这样的问题。
中文字符集可以是 gbk,utf8,gb2312
mb_strlen () 对应的函数为 strlen() 求字符串的长度
mb_strstr() 对应的函数为 strstr() 求某字符串到结尾的字符
mb_strpos() 对应的函数为 strpos() 求出字符最先出现处
mb_substr() 对应的函数为 substr() 取出指定的字符串
mb_substr_count() 对应函数为 substr_str() 返回字符串出现的次数
iconv_strlen() 对应的函数为 strlen() 求字符串的长度
iconv_strpos() 对应的函数为 strpos() 求出字符最先出现处
iconv_substr() 对应的函数为 substr() 求某字符串到结尾的字符
iconv_strrpos()对于的函数为 substr() 查找字符串在一个字符串中最后出现的位置
详细可参考手册 国际化与字符编码支持|多字节字符串
国际化与字符编码支持|iconv
实例:
<?php
setlocale(LC_ALL, 'en_US'); //设置为美式英语
echo strftime("%A %e %B %Y", time()); //输出当前时间
echo "<br>";
setlocale(LC_ALL, 'chs'); //设置为中文
$dates=strftime("%A %e %B %Y", time()); //输出当前时间
echo iconv("gb2312","utf-8",$dates); //输出经过编码格式转换后的中文时间
?>
注意:
内容编码(页面声明的字符集)与文件编码(文件本身的字符集)要求一致,否则会出现乱码;
记事本的默认字符集为:ANSI,为了避免不必要的错误,尽量避免用记事本新建文件;
window记事本编辑器如果保存为utf-8文件就会帮你加上BOM头;在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,
现在已经有很多软件识别BOM头,但是还有些软件不能识别BOM头,比如PHP就不能识别BOM头,这也是用记事本编辑utf-8编码后执行就会出错的原因了。
如要清除文件BOM头
请见 PHP|实例|文件|自动去除文件BOM代码
推荐文本编辑器:NotePad++
phpDesigner8软件中 如果有php文件中有Bom头,则有"文件|文件编码|以BOM保存"选项,将其选项去掉,则去掉了BOM头信息
下面以utf-8为例,说明如何统一编码.
1.将网页文件的编码保存为utf-8无BOM
记事本,保存文件的时候选择"编码"为utf-8
editPlus,保存时选择"encoding"为utf-8
Notepadd++,按ctrl+A全选当前文档,选择菜单栏的Encoding-->Convert to UTF-8 without BOM
UEStudio,保存时选择"格式"为utf-8无BOM其他软件请根据情况操作
2.在PHP页面的<?php ?>标签对之间使用 header('Content-type : text/html; Charset=UTF-8'); 声明页面编码为utf-8
在html头部(<head>和</head>之间)写入<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />来声明页面编码为utf-8
3.PHP页面中连接数据库服务器后执行sql查询前使用以下代码先将字符集设置为utf-8
以下方案任选一种,其中 $myqli 和 $pdo 是创建的mysqli和pdo类的对象实例
mysql_query('SET NAMES utf8'); // mysql 扩展
mysqli_query('SET NAMES utf8'); // mysqli 扩展
$mysqli->query('SET NAMES utf8'); // mysqli 扩展
$pdo->exec('SET NAMES utf8'); // PDO 扩展
4.创建数据表的时候将默认编码设置为utf8,将字符校对(callate)设置为utf8_general_ci,注意MySQL里面是utf8而不是utf-8
IF NOT EXISTS `name`(
....代码....
)ENGINE InnoDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
做到这四点,相信你的网页和数据库不会再乱码.