笔记:PHP查询mysql数据后中文字符乱码

新建表Clubs

CREATE TABLE `Clubs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT ‘‘,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

id  name

1   程序员
2   架构师
3   产品经理
4   测试

如果在phpMyAdmin中查看name字段内容就是?,修改MySQL 字符集选择UTF8,MySQL 连接校对选择utf8_general_ci

在mysql中查看字段内容为正确的中文字符后,通过mysql_query(‘select * from clubs‘)查询

用var_dump打印查询结果如下,所有的中文汉字都变成了?

array (size=4)
  0 =>
    array (size=2)
      ‘id‘ => string ‘1‘ (length=1)
      ‘name‘ => string ‘???‘ (length=3)
  1 =>
    array (size=2)
      ‘id‘ => string ‘2‘ (length=1)
      ‘name‘ => string ‘???‘ (length=3)
  2 =>
    array (size=2)
      ‘id‘ => string ‘3‘ (length=1)
      ‘name‘ => string ‘????‘ (length=4)
  3 =>
    array (size=2)
      ‘id‘ => string ‘4‘ (length=1)
      ‘name‘ => string ‘??‘ (length=2)

解决办法:在执行mysql_query之前先执行

mysql_query("set names utf8");

如果还不行,请确认php文件编码格式是否是utf8格式,同时在php文件头增加

header("Content-Type:text/html;charset=utf-8");

解决问题的根本办法就是把相关的编码格式都统一为utf8。

查询结果中文字符没问题了,但是$clubs转化为json时,name字段中文字符却又变了

$clubs=json_encode($clubs);
echo($clubs);

输出内容如下

[{"id":"1","name":"\u7a0b\u5e8f\u5458"},{"id":"2","name":"\u67b6\u6784\u5e08"},{"id":"3","name":"\u4ea7\u54c1\u7ecf\u7406"},{"id":"4","name":"\u6d4b\u8bd5"}]

解决方案:

foreach ( $clubs as $key => $value ) {             

    foreach($value as $k=>$v){

        $clubs[$key][$k] = urlencode($v);
    }              

}             

$clubs=json_encode($clubs);
echo(urldecode($clubs));

原因:

json_encode只支持UTF8编码的字符,使用JSON作为提交和接收的数据格式时,字符都采用UTF8编码处理,当我们的页面编码和数据库编码不是采用UTF8的时候,就极容易出现中文乱码的问题。解决办法是在用js或者PHP处理JSON数据的时候都采用UTF8的形式。

笔记:PHP查询mysql数据后中文字符乱码

时间: 2024-10-10 00:03:20

笔记:PHP查询mysql数据后中文字符乱码的相关文章

jsp与mysql中的中文字符乱码问题

刚开始自学jsp,在练习的过程中遇到了一个很严重的问题,就是中文字符乱码的问题,我用了三天的时间,搜集资料,终于解决了这个问题,现在对学到的东西进行一下总结整理. 1.首先是jsp页面显示乱码的问题,<title></title>标签中有中文有英文,设置<meta charset="utf-8" > 显示乱码,改为gbk则可正常显示,其他页面使用utf-8则显示正常.最终发现是因为文件创建是用了不同的方法,一般情况下,用记事本编写代码,文件另存为*.

Eclipse查询MySql、添加中文乱码问题

一.设置MyEclipse的字符编码,步骤如下: 1.进入Window--Preferences--General--Workspace,Text file encoding 选项中默认的Default(GBK)选项更改为Other,并将值设为utf-8: 2.进入Window--Preferences--MyEclipse--Files and Editors,将这个选项下面的:ASP and PHP.CSS.DTD.HTML.JSP.XML中的字符编码全部更改为utf-8: 3.如果有必要的

mysql中采用concat来拼接中文字符乱码解决方式(转)

mysql中采用concat来拼接中文字符乱码解决方式 - fuxuejun的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/fuxuejun/article/details/6284725 mysql concat乱码问题解决 concat(str1,str2) 当concat结果集出现乱码时,大都是由于连接的字段类型不同导致,如concat中的字段参数一个是varchar类型,一个是int类型或doule类型,就会出现乱码. 解决方法:利用mysql的字符

Keil uVision4 代码编辑器中文字符乱码问题

MDK-ARM 使用中一直有个很纠结的问题,中文字符支持不好. 比如写代码注释,使用中文删除字符就会只删除一半问题.复制粘贴代码中间有中文就会出现乱码问题. 想过换IAR,新学个IDE也麻烦,上面的问题也不很大稍微绕一下也能解决,所以一直没换. 发现其实这个根本不是问题,安装好后默认是ANSI编码,所以会出现上述问题.只要把编码改成UTF-8编码就能解决上述烦恼. 设置步骤:     1.选择菜单:[Edit]->[Configuration]       2.页签[Editor]中 Gener

ubuntu下解压zip rar中文字符乱码的问题

如题,解压zip rar中文乱码的问i题一直困扰着我,每次都要到window系统下解压,很是不方便,今天终于把这类问题解决了.整理总结分享如下 一 .    解决 Rar 压缩文件乱码问题 Rar 压缩在 Ubuntu 下可能出现乱码,这是由于安装了 rar 软件包(开源 Rar 压缩格式解压工具), 解决方法是安装闭源的 unrar 软件包,在终端依次输入以下命令即可: sudo apt-get remove rar sudo apt-get install p7zip-full p7zip-

SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;

情况一: ajax中传值时是乱码(后台可以获取到中文字符,但用@ResponseBody返回时前台为乱码) 情况二: Controller 中 request.getParameter()获取到的是乱码 @RequestMapping(params = "method=submit") public String submit(HttpServletRequest request, ModelMap modelMap) throws Exception{ String uname =

myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)

出现这个问题有以下三步解决思路: 1. 检查myeclipse的编码格式 windows---->Preferences---->general---->Workspace,右侧窗口Text file encoding,选择Other,改变为UTF-8. 此时刷新项目,看能否正常写入中文字符. 2. 检查数据库的编码格式 我用sqlyog连接的数据库,先在询问窗口查询一下编码格式: SHOW VARIABLES LIKE 'character_set_%';结果如下: 检查图中的几项是否

MySQL用Load Data local infile 导入部分数据后中文乱码

今天在两台MySQL服务器之间导数据,因为另一个MySQL服务器是测试用的,差一个月的数据,从现有MySQL服务器select到一个文件,具体语句是: select * from news where ine_time>="2010-02-01"  and ine_time <"2010-03-01" into outfile "/tmp/newsdata.sql"; 然后scp到另一个MySQL 在线扑克室 Server上导入到对应

MySQL数据移植中的乱码问题

MySQL数据如果从低版本的mysql向更高的版本移植的时候,若移植的数据中含有中文的数据时,很容易出现乱码问题.很多是在从MySQL4.x向MySQL5.x移植的时候出现.例如,我找了一个用mysql.4建立的表,表结构如下: CREATE TABLE `tb_bookcase` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) DEFAULT NULL, `Column_3` char(10) DEFAUL