MySQL+PHP产生乱码原因分析与解决方法

 更新时间:2016年11月25日 17:40  点击:2127

  ◆ mysql数据库教程默认的编码是utf8,如果这种编码与你的php网页不一致,可能就会造成mysql乱码;

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

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

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

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

  ◆ php页面字符集不正确;

  ◆ php连接mysql数据库语句指定的编码不正确。


  注意:

  很多人都怀疑mysql版本不一致会导致乱码,相信看了本说明你就不会这样认为了。

  平时你在某些网站看到的文字可能有几种编码, 如你看到一个繁体字,它有可能是big5编码,也有 可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点。

  如果你是做一个简体编码的网页,编码定为gb2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法:

  将网站编码设为 utf-8,这样可以兼容世界上所有字符。

  如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 gbk, gbk与gb2312的区别就在于:gbk能比gb2312显示更多的字符,要显示简体码的繁体字,就只能用gbk。

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

  mysql+php产生乱码的解决办法:

  如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改mysql的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题。

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

sql代码
   
01.alter database 'test' default character set utf8 collate utf8_bin 
  以上命令就是将test数据库的编码设为utf8。


  修改表的编码:

sql代码
   
01.alter table 'category' default character set utf8 collate utf8_bin 
 以上命令就是将一个表category的编码改为utf8。

  修改字段的编码:

sql代码
   
01.alter table 'test' change 'dd' 'dd' varchar( 45 ) character  
   
02.set utf8 collate utf8_bin not null 
 以上命令就是将test表中dd的字段编码改为utf8。

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

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

  在连接数据库的语句中。

sql代码
   
01.mysql_connect('localhost','user','password');  
   
02.mysql_select_db('my_db');  
   
03.mysql_query("set names utf8;");     //select 数据库之后加多这一句 
 为了避免php页面乱码的发生,php页面开始第一句

 

php代码
   
01.header("content-type:text/html; charset=utf-8"); // 
强行指定页面的编码,以避免乱码

  注意:照以上方法修改以后只能保证你新插入的数据不会乱码,举个例:如果你用户已提交的数据是big5,你却想通过以上方法改为可以在gb2312的网页正确显示是不可能的, 这种文字内码的变换只能通过另写程序来解决。

下面这三款获取当前时间都很好的解决8小时差距问题的,只要在获取时间前加上date_default_timezone_set(\\\"Asia/Chongqing\\\");就解决的时区问题,一般我们用date(),time()函数都会存在时差问题。


/**
  * 获取服务器当前日期时间
  */

 代码如下 复制代码
 function get_server_datetime()
 {
  date_default_timezone_set("asia/chongqing");
  return date("y-m-d h:i:s");
 }

 /**
  * 获取服务器当前日期
  */

 代码如下 复制代码
 function get_server_date()
 {
  date_default_timezone_set("asia/chongqing");
  return date("ymd");
 }

 /**
   * 获取服务器当前时间
   */

 代码如下 复制代码
 function get_time()
 {
      date_default_timezone_set("asia/chongqing");
      $timeval["h"] = date("h"); //小时
      $timeval["i"] = date("i"); //分钟
      $timeval["s"] = date("s"); //秒
      return $timeval;
    }

/*
现在我要用dedecms来做一个问答功能,功能是不需要用户登陆并可以提问,因为问题时需要积分所以我把登际与积分都取消了。
找到
post.php教程文件打开并找到

 代码如下 复制代码
if(!isset($action)) $action = '';
if(empty($uid) && $action != 'rate')
{
 showmsgs('no_login','../member/login.php?gourl=../ask/');
 exit;
}


代码过滤掉,这是就是登陆验证,这样提问就不要登陆了,下面取消积分
找到

 代码如下 复制代码
 $needscore = $anonymous * 10 + $reward;
 if($scores < $needscore)
 {
  showmsgs('noscore','-1');
 }

删除就ok了,这样你的dedecms可登陆也可以以直接发布哦。

本站原创教程转载注明来源于www.111cn.net

//将要处理的汉字,先由UTF8的汉字转成html实体形式再使用.

//示例代码:

 代码如下 复制代码
//ini_set('JIS-mapped Japanese Font Support',false);
$pic=imagecreate(250,30);
$black=imagecolorallocate($pic,0,0,0);
$white=imagecolorallocate($pic,255,255,255);
$font="C://WINDOWS//Fonts//simhei.ttf";

$str = '中华人民共和国';
$str = mb_convert_encoding($str, "html-entities","utf-8" );//结果:&#21738;&#19968;&#38431;&#20248;&#20808;&#24320;&#29699;

 代码如下 复制代码

imagettftext($pic,10,0,10,20,$white,$font,$str);

header("Content-type: image/jpeg");
$filename='./photo.jpg';
$im=imagecreatefromjpeg($filename);
imagecopymerge($im,$pic,0,0,0,0,250,30,50);
imagejpeg($im);


//pChart 示例代码:

/*
     Example14: A smooth flat pie graph
*/

办法直接去 include/common.inc.php教程中将

----
//禁止 session.auto_start
if ( ini_get('session.auto_start') != 0 )
{
    exit('php.ini session.auto_start must is 0 ! ');
}
----
删除.

==================
这个删除后,再往下找。。。
还有一处有
if ( ini_get('register_globals') )
{
    exit('php.ini register_globals must is Off! ');
}

删除后可完美解决。

 

需要删除的部分为:
1. 第10-20行
//开启register_globals会有诸多不安全可能性,因此强制要求关闭register_globals
if ( ini_get('register_globals') )
{
    exit('php.ini register_globals must is Off! ');
}

//禁止 session.auto_start
if ( ini_get('session.auto_start') != 0 )
{
    exit('php.ini session.auto_start must is 0 ! ');
}

2.第72到75行
if ( ini_get('register_globals') )
{
    exit('php.ini register_globals must is Off! ');
}

以上两处删除即可完美解决!

在apche的php.ini中 搜索这一项,你们的应该是register_globals = on 修改为register_globals = off   保存 重启服务器环境  比如重启apche

 

早上更新主要是对register_globals以及session.auto_start进行严格过滤
如果是独立服务器的用户可以修改php配置文件中的php.ini,将register_globals=On改为register_globals=Off
同时把session.auto_start=1改成session.auto_start=0,然后重启Apache.
如果是虚拟主机的用户,尽可能的通知空间商让其对配置进行修改,或者可以尝试ini_set('session.auto_start',0)来.
如果实在不行,那只有采用最后的办法直接去include/common.inc.php中将

----
//禁止 session.auto_start
if ( ini_get('session.auto_start') != 0 )
{
    exit('php.ini session.auto_start must is 0 ! ');
}

[!--infotagslink--]

相关文章

  • php生成二维码中文乱码问题解决方法

    最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    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
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • 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 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    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
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04