Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 943|回复: 0

【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-17 07:09:20 | 显示全部楼层 |阅读模式

    原文链接:http://blog.csdn.net/ysydao/article/details/11002295

    PHP 用pdo连接数据库时出现中文乱码问题解决办法

    1.array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"),在与数据库建立连接的时候的第四个参数
       example:    
        $dbh = new PDO($dsn,$user,$pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
    下面两种按理说应该也能,而且有网友验证了这一事实,但我没成功!
    2.通过query():
         $dbh = new PDO($dsn,$user,$pass);
         $dbh -> query('set names utf-8');
    3.通过esec(): 
         $dbh = new PDO($dsn,$user,$pass);
         $dbh -> exec('set names utf-8');

     

    A.首先说下HTML中文乱码问题的解决方法。
    比如有个index.html的页面(这里是指真正的静态页面,修改服务器的……伪静态的请看方案B)
    1.在head标签里面加入这句
    view plaincopy to clipboardprint

    <head>   
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  

    </head>  

    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head>


    2.将文件的编码存为UTF-8.记事本或Editplus等编辑器都有保存时选择编码的功能。

    B.HTML和PHP混合的页面解决方案。
    除了A方案说的那些之外。还要在文件的最上面加上下面这句代码。 
    view plaincopy to clipboardprint?
    <?php  

    header("Content-type:text/html;charset=utf-8");   
    ?>  
    <?phpheader("Content-type:text/html;charset=utf-8");?> 
    注意header前面不要有任何的输出(echo/print/print_r/var_dump等PHP的输出语句,或者是你在“<?php”前面回车/空格)。否则会报错。
    如果你用系统自带的Notepad保存为UTF-8编码的文件时会报错。
    为什么呢?明明header已经写在最前面了。
    不要着急,因为你看到的并不是真实的。实际上你的“<?php”标签前面已经存在了3个可恶的‘东东’,但普通编辑器看不到。如果你用UltraEdit打开并切换到16进制模式可以看到前面多了“EF BB BF”。这是跟Windows识别编码的方式有关。但我们的Apache却不认识这个,把它当成了输出。导致header出错。别怕,还是有解决的方法。
    很简单,直接使用Editplus保存为UTF-8即可。因为Editplus的UTF-8是去除了BOM的。

    C.纯PHP页面的中文乱码解决方案(数据是静态的)
    只要在页面的开始加上 
    view plaincopy to clipboardprint?
    <?php  

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

    ?>  


    <?phpheader("Content-type:text/html;charset=utf-8");?> 
    然后保存为UTF-8编码的文件即可。注意和方案B一样。注意用那些去除BOM的编辑器保存。否则还是会报错。

    D.PHP+MySQL中文乱码解决方案
    除了按方案C那样的做法外,还要在你的数据查询/修改/增加之前加入数据库编码。
    view plaincopy to clipboardprint?
    <?php  

     mysql_query('SET NAMES UTF8');   
    //接下来的就是查出数据或者修改,增加咯   

    ?>  


    <?phpmysql_query('SET NAMES UTF8');//接下来的就是查出数据或者修改,增加咯?> 

    注意这里的UTF8和之前的不一样。中间没有横线。
    通过以上应该就能解决PHP中文乱码的问题了。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 13:50 , Processed in 0.055356 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表