MySQL+PHP产生乱码原因分析与解决方法
◆ 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" );//结果:哪一队优先开球
代码如下 | 复制代码 |
imagettftext($pic,10,0,10,20,$white,$font,$str); header("Content-type: image/jpeg"); |
//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 ! ');
}
相关文章
- 最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 下面我们来看一篇关于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
- 今天在写一个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更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
安卓手机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- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04