您的位置:首页 > 编程语言 > PHP开发

PHP MySQL中文内容显示乱码

2007-12-11 11:16 281 查看
MySQL版本:mysql-4.1.21-win32.exe  
  Apache版本:apache_1.3.37-win32-x86-no_src.msi  
  操作系统:WinXP   +   SP2  
  PHP版本:php-4.4.3-Win32.zip  
   
  我的网站目前要支持中、英文,以后还需支持其它语言。  
   
  所以我在创建数据库时都用了utf8  
  我使用了PEAR   +   Smarty  
  PHP代码如下:  
  $user   =   DB_DataObject::factory('users');  
  $user->query("select   *   from   users   where   user_id=1");  
  $user->fetch();  
  $smarty->Assign('user',$user);  
  $smarty->display('index.tpl');  
  模板文件:  
  <!DOCTYPE   html   PUBLIC   "-//W3C//DTD   XHTML   1.0   Strict//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  <html   xmlns="http://www.w3.org/1999/xhtml"   lang="en">  
   
  <head>  
      <meta   http-equiv="Content-Type"   content="text/html;   charset=utf-8"   />  
      <title>6666</title>  
  </head>  
   
  <body>  
  {$user->name}  
  </body>  
  </html>  
   
  但显示出来的是问号,英文的话就正常。  
  1.用PHPMyAdmin显示也能正常显示中文。  
  2.用命令提示符显示出来是乱码。  
  请问该如何解决此问题?谢谢。网上找了资料查看,但还是不行。  
   
   
   
   
   
   
 

你的数据库里面存的是什么编码  
 

数据库存为utf-8,还有在<meta   http-equiv="Content-Type"   content="text/html;   charset=utf-8"   />的同时,把文件也要保存为utf-8格式。。。

$user->query("set   names   utf8");  
  $user->query("select   *   from   users   where   user_id=1");

1、数据库也是UTF8编码  
   
  2、文件存为UTF-8,好像改了一个页面,但是还不行。  
   
  3、我不是每个查找都用Query了,有些用GET   Find(),请问在连接时就设置一下。  
   
 

 
  那你应该在数据库连接成功之后设置set   names   utf8  
   
  $user   =   DB_DataObject::factory('users');  
  修改DB_DataObject类吧

一般mysql4很容易出现乱码问题,解决此类问题  
  1、进入mysql,运行  
  mysql>   show   variables   like   '%character%';  
  +--------------------------+---------------------------------------------------------+  
  |   Variable_name                         |   Value                                                                                                       |  
  +--------------------------+---------------------------------------------------------+  
  |   character_set_client           |   latin1                                                                                                     |  
  |   character_set_connection   |   latin1                                                                                                     |  
  |   character_set_database       |   utf8                                                                                                         |  
  |   character_set_results         |   latin1                                                                                                     |  
  |   character_set_server           |   utf8                                                                                                         |  
  |   character_set_system           |   utf8                                                                                                         |  
  |   character_sets_dir               |   C:/Program   Files/MySQL/MySQL   Server   4.1/share/charsets/   |  
  +--------------------------+---------------------------------------------------------+  
  7   rows   in   set   (0.00   sec)  
   
  如果显示这样的话,那么需要运行。  
  set   character_set_client   =   utf8;  
  set   character_set_connection   =   utf8;  
  set   character_set_results   =   utf8;  
   
  2、打开apache的配置文件httpd.conf查看是否有   AddDefaultCharact   UTF8,如果没有加上就可以了,别忘了重起apche.  
   
  好了吗?

在所有查询前  
  set   names   utf8

模板文件也需要用UTF8编码方式保存.

呵呵!是啊!存的时候是什么编码,取出来也是什么编码就OK了  
 

今天早上过来,显示正常了,晕啊。  
  现在数据库是UTF8   ,网页UTF-8编码,<meta   http-equiv="Content-Type"   content="text/html;   charset=utf-8"   />  
   
  可能在Apache和MySql的配置文件改了什么,还得测试。  
   
  今天国外空间访问不上,到国外空间测试后才能确定。

 
  在数据库连接后面加一个  
  mysql_query("set   names   'gb2312'");

yema0616()   (   )    
  和  
  yueliangdao0608((深圳)PHP和MYSQLQQ:38257291)  
   
  办法应该行
http://blog.chinaunix.net/u/19869/showart_121729.html
$user->query("set   names   utf8");  
   
  每个查询前都加上这句

国外的空间上的自己不能修改配置文件吧?

乱码问题,有时候真的很头痛,

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息