页面编码为UTF-8, 用echo输出中文是乱码, 如何解决?

时间:2023-01-04 23:22:39
由于要同时兼容多国语言,
页面编码是UTF-8,页面的保存格式也是UTF-8
用echo("中国");是乱码
用tinybutstrong模板也是乱码.例如,HTML中:[var.China]   PHP中: $China="中国";

请问如何解决? 感谢

12 个解决方案

#1


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

#2


你看看显示的时候,浏览器自动选择的编码是什么

如果还是默认的gb2312,那就加上
<META http-equiv=Content-Type content="text/html; charset=UTF-8">

如果自动选的是UTF-8的话,应该不会有乱码

#3


引用楼主 ILoveU_Le 的帖子:
由于要同时兼容多国语言, 
页面编码是UTF-8,页面的保存格式也是UTF-8 
用echo("中国");是乱码 
用tinybutstrong模板也是乱码.例如,HTML中:[var.China]   PHP中: $China="中国"; 

请问如何解决? 感谢 

#4


取消web server的默认编码 否则页面编码有时不会起作用

#5


PHP代码与HTML代码在同一个文件吗?
如果不在同一个文件必须保证两者保存时使用的编码相同,都存成utf-8。

#6


直接从我空间抓过来的,打个广告~~
http://phnessu4.googlepages.com/phpcode1

动态网页的三个统一编码

动态网页的3个申明编码统一,否则回乱码。一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:   


1、文件编码:指的是页面文件(.html .php等)本身是以何种编码来保存的。记事本和Dreamweaver或EditPlus再打开页面时候会自动识别文件编码因而不太会出问题。

2、页面申明编码:在HTML代码HEAD里面,可以用
<meta http-equiv="Content-Type" content="text/html; charset="XXX" />
来告诉浏览器网页采用了什么编码,目前中文网站开发中XXX主要用的是GB2312和UTF-8两种编码。 

3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。
应用:数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用:


mysql_query("SET NAMES GBK"); 或 mysql_query("SET NAMES gb2312"); 


(这个语句相当于执行了
  SET character_set_client=gb2312; 
  SET character_set_results=gb2312; 
  SET character_set_connection=gb2312;
不论是插入、更新、删除还是查询操作,只要是操纵数据库,都要先执行SET NAMES “gb2312″,这样才能保证插入和显示的正确性。如果插入操作前没有执行这条语句,仅在查询时执行该语句,则仍然无法保证显示的正确性。) 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:  

mysql_query("SET NAMES UTF8"); 

#7


用什么格式保存的!!!

#8


网页的文本编码也要修改的,不是单单加个<META http-equiv=Content-Type content="text/html; charset=UTF-8"> 就了事了。

如果文本编码是utf-8就算不加<META http-equiv=Content-Type content="text/html; charset=UTF-8">  也一样正常识别。

#9


谢谢大家解答,但是问题还没解决.
php和html的文本格式都是UTF-8了
meta也是UTF-8
但是还是有乱码.

#10


现在发现
 echo "中国"  不会出现乱码

但是
 $str="中国"
 echo $str  就乱码了

请问如何解决? 谢谢!
(现在, php和html的文本格式都是UTF-8了,meta也是UTF-8 )

#11


在网页最前面加header('Content-Type: text/html; charset=utf-8');
保存时保存为utf-8

#12


谢谢了,学习中....

#1


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

#2


你看看显示的时候,浏览器自动选择的编码是什么

如果还是默认的gb2312,那就加上
<META http-equiv=Content-Type content="text/html; charset=UTF-8">

如果自动选的是UTF-8的话,应该不会有乱码

#3


引用楼主 ILoveU_Le 的帖子:
由于要同时兼容多国语言, 
页面编码是UTF-8,页面的保存格式也是UTF-8 
用echo("中国");是乱码 
用tinybutstrong模板也是乱码.例如,HTML中:[var.China]   PHP中: $China="中国"; 

请问如何解决? 感谢 

#4


取消web server的默认编码 否则页面编码有时不会起作用

#5


PHP代码与HTML代码在同一个文件吗?
如果不在同一个文件必须保证两者保存时使用的编码相同,都存成utf-8。

#6


直接从我空间抓过来的,打个广告~~
http://phnessu4.googlepages.com/phpcode1

动态网页的三个统一编码

动态网页的3个申明编码统一,否则回乱码。一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:   


1、文件编码:指的是页面文件(.html .php等)本身是以何种编码来保存的。记事本和Dreamweaver或EditPlus再打开页面时候会自动识别文件编码因而不太会出问题。

2、页面申明编码:在HTML代码HEAD里面,可以用
<meta http-equiv="Content-Type" content="text/html; charset="XXX" />
来告诉浏览器网页采用了什么编码,目前中文网站开发中XXX主要用的是GB2312和UTF-8两种编码。 

3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。
应用:数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用:


mysql_query("SET NAMES GBK"); 或 mysql_query("SET NAMES gb2312"); 


(这个语句相当于执行了
  SET character_set_client=gb2312; 
  SET character_set_results=gb2312; 
  SET character_set_connection=gb2312;
不论是插入、更新、删除还是查询操作,只要是操纵数据库,都要先执行SET NAMES “gb2312″,这样才能保证插入和显示的正确性。如果插入操作前没有执行这条语句,仅在查询时执行该语句,则仍然无法保证显示的正确性。) 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:  

mysql_query("SET NAMES UTF8"); 

#7


用什么格式保存的!!!

#8


网页的文本编码也要修改的,不是单单加个<META http-equiv=Content-Type content="text/html; charset=UTF-8"> 就了事了。

如果文本编码是utf-8就算不加<META http-equiv=Content-Type content="text/html; charset=UTF-8">  也一样正常识别。

#9


谢谢大家解答,但是问题还没解决.
php和html的文本格式都是UTF-8了
meta也是UTF-8
但是还是有乱码.

#10


现在发现
 echo "中国"  不会出现乱码

但是
 $str="中国"
 echo $str  就乱码了

请问如何解决? 谢谢!
(现在, php和html的文本格式都是UTF-8了,meta也是UTF-8 )

#11


在网页最前面加header('Content-Type: text/html; charset=utf-8');
保存时保存为utf-8

#12


谢谢了,学习中....