欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

解决pdo中文乱码 有大用 有大大用 有大大大用

1. php页面设置:


$pdo->query('set names utf8;');

//或者?  $pdo->exec("SET NAMES 'utf8';");


或者  

$pdo = new PDO( 
    'mysql:host=hostname;dbname=defaultDbName', 
    'username', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
); 



2. 检查数据表的编码格式,默认的不是utf8,再建立表时需要指定表的编码格式,如已经表已经存在了,那么可以通过语句修改表的编码方式,如下 :


alter table 表名 convert to character set utf8;


删除原有乱码,再次插入一条中文数据,


$rs = $pdo->query("select * from _t");

while ($row=$rs->fetch()){

print_r($row);

}


发现显示正常~


来自  https://blog.csdn.net/abandonship/article/details/7305192




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

原文链接: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');   
//接下来的就是查出数据或者修改,增加咯   

?>  


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

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

来自  https://www.cnblogs.com/vcpp123/p/6034333.html



PDO连接数据库的中文乱码问题

今天在lamp环境下遇到一个非常严重的问题:在本地浏览器客户端中,从服务器数据库里查询出来的内容,只要是中文全都显示成问号 '?????'。

让我十分疑惑,因为 mysql从数据库到数据表全都utf8_general_ci,网站文件php css js html 也全采用utf8编码,而且经过网上资料各种排查试验无果。

 

而且有一个奇怪的现象,就是:

“在客户端新插入的数据,存在数据库中是乱码的,但显示在客户端是不乱码。之前在本地(windows)开发测试时插入的数据,只要是中文,客户端统统显示问号。”

 

问题的原因就很明显了,这说明在存入数据时就出现了问题,并不是数据库自身的原因。mysql php apache中好像跟apache又没什么关系,所以问题肯定出在了php操作数据库的代码里!

 

我是采用pdo来操控数据库的,于是搜索了一下pdo怎样设置utf8编码,在php-pdo官方文档中,好像并没有提及,但是在 User Contributed Notes 中发现这么一段

<?php 
//If you use the UTF-8 encoding, you have to use the fourth parameter : 

$db = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
?>

在实例化PDO时,需要提供第四个参数,来设置编码。

array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')

再实验用php往数据库中插入数据,发现数据库中新插入的数据不再乱码了,并且客户端展示的数据库中文内容也不再显示问号,原来一切问题都出现在数据库和客户端中间的桥梁--PDO这里


来自  https://www.cnblogs.com/xingyazhao/p/7259859.html 

普通分类: