php页面,mysql数据库转utf-8乱码,utf-8编码问题总结


Posted in PHP onAugust 27, 2015

示例一:

PHP页面转UTF-8编码问题

1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8");

2.PHP文件编码问题 点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,如果是ANSI,需要将编码改成:UTF-8。

3.PHP文件头BOM问题: PHP文件一定不可以有BOM标签,否则,会出现session不能使用的情况,并有类似的提示:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 这是因为,在执行session_start() 的时候,整个页面不能有输出,但是当由于前PHP页面存在BOM标签,PHP把这个BOM标签当成是输出了,所以就出错了! 所以PHP页面一定要删除BOM标签

删除这个BOM标签的方法:

1.可以用Dreamweaver打开文件,并重新保存,即可以去除BOM标签!

2.可以用EditPlus打开文件,并在菜单“首选项”->“文件”->"UTF-8标识",设置为:“总是删除签名”,然后保存文件,即可以去除BOM标签!

3.PHP以附件形式保存文件的时候,UTF-8编码问题: PHP以附件形式保存文件,文件名必须是GB2312编码,否则,如果文件名中有中文的话,将是显示乱码: 如果你的PHP本身是UTF-8编码格式的文件,需要将文件名变量由UTF-8转成GB2312: iconv("UTF-8", "GB2312", "$filename");

4.截断显示文章标题时,出现乱码或者“?”问号的问题:

一般文章标题很长的时候,会显示一部分标题,会对文章标题进行截断,由于一个UTF-8编码格式的中文字符会占用3个字符宽度,截取标题的时候,有时会只截取到一个中文字符的1个字符或2字符宽度,没截取完整,将出现乱码或“?”问号的情况,

用下面的函数截取标题,就不会有问题:

function get_brief_str($str, $max_length) { 
  echo strlen($str) . ""; 
  if (strlen($str) > $max_length) { 
    $check_num = 0; 
    for ($i = 0; $i < $max_length; $i++) { 
      if (ord($str[$i]) > 128) 
        $check_num++; 
    } 
    if ($check_num % 3 == 0) 
      $str = substr($str, 0, $max_length) . "..."; 
    else 
      if ($check_num % 3 == 1) 
        $str = substr($str, 0, $max_length +2) . "..."; 
      else 
        if ($check_num % 3 == 2) 
          $str = substr($str, 0, $max_length +1) . "..."; 
  } 
  return $str; 
}

MYSQL数据库使用UTF-8编码的问题

1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci”或执行语句:

CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创建数据表的时候:如果是该字段是存放中文的话,则需要将“整理”设置为:“utf8_general_ci”,如果该字段是存放英文或数字的话,默认就可以了。

相应的SQL语句,例如:

CREATE TABLE `test` ( 
`id` INT NOT NULL , 
`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
PRIMARY KEY ( `id` ) 
) ENGINE = MYISAM ;

2.用PHP读写数据库

在连接数据库之后:

$connection = mysql_connect($host_name, $host_user, $host_pass);

加入两行:

mysql_query("set character set 'utf8'");//读库 
mysql_query("set names 'utf8'");//写库

就可以正常的读写MYSQL数据库了。

示例二:

php+mysql的utf-8中文乱码问题的解决方法

问题汇总:

1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.

2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码.

5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.

6.PHP页面字符集不正确.

7.PHP连接MYSQL数据库语句指定的编码不正确.

使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难了.

针对不同问题的解决方法:

1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.

修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令:

Alter DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

以上命令就是将test数据库的编码设为utf8.

2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

修改表的编码:

Alter TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

以上命令就是将一个表category的编码改为utf8.

3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

修改字段的编码:

Alter TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

以上命令就是将test表中 dd的字段编码改为utf8.

4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码.

如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可.

5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.

这种情况也是修改页面charset即可.

6.PHP页面字符集不正确.

为了避免PHP页面乱码的发生,PHP页面开始第一句

header("content-type:text/html; charset=utf-8");

//强行指定页面的编码,以避免乱码

7.PHP连接MYSQL数据库语句指定的编码不正确.

在连接数据库的语句中.

mysql_connect('localhost','user','password');
mysql_select_db('my_db');
mysql_query("set names 'utf8'"); //select 数据库之后加多这一句

以上内容就是本文给大家介绍php页面,mysql数据库转utf-8乱码,utf-8编码问题总结,希望大家喜欢。

PHP 相关文章推荐
如何给phpadmin一个保护
Oct 09 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
php rsa加密解密使用详解
Jan 14 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
php解析base64数据生成图片的方法
Dec 06 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
PHP利用二叉堆实现TopK-算法的方法详解
Apr 24 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
PHP生成随机密码方法汇总
Aug 27 #PHP
windows下apache搭建php开发环境
Aug 27 #PHP
php给图片添加文字水印方法汇总
Aug 27 #PHP
微信公众平台开发之配置与请求
Aug 26 #PHP
php基础教程
Aug 26 #PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 #PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 #PHP
You might like
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
js tab 选项卡
2009/04/26 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python实现两张图片的像素融合
2019/02/23 Python
详解Python中is和==的区别
2019/03/21 Python
详解python编译器和解释器的区别
2019/06/24 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
大学生简单自荐信
2013/11/10 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
施工安全承诺书
2014/05/22 职场文书
2014财务年度工作总结
2014/11/11 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang