解决php乱码utf-8问题-PHP问题

资源魔 37 0

php乱码utf-8成绩的处理办法:一、正在HTML页面中退出代码“charset=utf-8”;二、正在PHP页面中退出代码“header("Content-Type: text/html;charset=utf-8");”。

一.HTML页面转UTF-8编码成绩
1.正在head后,title前退出一行:

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

程序不克不及错,肯定要正在

显示的题目有多是乱码!

2.html文件编码成绩:

点击编纂器的菜单:“文件”->“另存为”,能够看到以后文件的编码,确保文件编码为:UTF-8,
假如是ANSI,需求将编码改为:UTF-8。
3.HTML文件头BOM成绩:
将文件从其余的编码转换成UTF-8编码时,有时分会正在文件的最开端加之一个BOM标签,
正在个BOM标签可能会招致阅读器正在显示中文的时分呈现乱码。
删除了这个BOM标签的办法:
1.能够用Dreamweaver关上文件,并从新保留,便可以去除了BOM标签!
2.能够用EditPlus关上文件,并正在菜单“首选项”->“文件”->"UTF-8标识",设置为:“老是删除了署名”,
而后保留文件,便可以去除了BOM标签!
4.WEB效劳器UTF-8编码成绩:
假如你按以上所列的步骤做了,仍是有中文乱码成绩,
请反省你的所应用的WEB效劳器的编码成绩
假如你应用的是Apache,请将设置装备摆设文件里的:charset 设成:utf-8(这里仅列出办法,详细格局请参考apache的设置装备摆设文件)
假如你应用的是Nginx,请将nginx.conf里的:charset 设成 utf-8,
详细找到 "charset gb2312;"或许相似的语句,改为:“charset utf-8;”。

二.PHP页面转UTF-8编码成绩
1.正在代码开端出退出一行:

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

2.PHP文件编码成绩

点击编纂器的菜单:“文件”->“另存为”,能够看到以后文件的编码,确保文件编码为:UTF-8,
假如是ANSI,需求将编码改为:UTF-8。
3.PHP文件头BOM成绩:
PHP文件肯定不成以有BOM标签
不然,会呈现session不克不及应用的状况,并有相似的提醒:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
这是由于,正在执行session_start() 的时分,整个页面不克不及有输入,然而当因为前PHP页面存正在BOM标签,
PHP把这个BOM标签当成是输入了,以是就犯错了!
以是PHP页面肯定要删除了BOM标签
删除了这个BOM标签的办法:
1.能够用Dreamweaver关上文件,并从新保留,便可以去除了BOM标签!
2.能够用EditPlus关上文件,并正在菜单“首选项”->“文件”->"UTF-8标识",设置为:“老是删除了署名”,
而后保留文件,便可以去除了BOM标签!
4.PHP以附件方式保留文件的时分,UTF-8编码成绩:
PHP以附件方式保留文件,文件名必需是GB2312编码,
不然,假如文件名中有中文的话,将是显示乱码:
假如你的PHP自身是UTF-8编码格局的文件,
需求将文件名变量由UTF-8转成GB2312:
iconv("UTF-8", "GB2312", "$filename");

5.截断显示文章题目时,呈现乱码或许“?”问号的成绩:
普通文章题目很长的时分,会显示一局部题目,会对文章题目进行截断,
因为一个UTF-8编码格局的中文字符会占用3个字符宽度,
截取题目的时分,有时会只截取到一个中文字符的1个字符或2字符宽度,
没截取完好,将呈现乱码或“?”问号的状况,
用上面的函数截取题目,就没有会有成绩:

function get_brief_str($str, $max_length) 
{ 
echo strlen($str) ."<br>"; 
if(strlen($str) > $max_length) 
{ 
$check_num = 0; 
for($i=0; $i < $max_length; $i++) 
{ 
if (ord($str[$i]) > 128) 
$check_num++; 
} 
if($check_num % 3 == 0) 
$str = substr($str, 0, $max_length)."..."; 
else if($check_num % 3 == 1) 
$str = substr($str, 0, $max_length + 2)."..."; 
else if($check_num % 3 == 2) 
$str = substr($str, 0, $max_length + 1)."..."; 
} 
return $str; 
}

三.MYSQL数据库应用UTF-8编码的成绩

1.用phpmyadmin创立数据库以及数据表
创立数据库的时分,请将“整顿”设置为:“utf8_general_ci”
或执行语句:

CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创立数据表的时分:假如是该字段是寄存中文的话,则需求将“整顿”设置为:“utf8_general_ci”,

假如该字段是寄存英文或数字的话,默许就能够了。

相应的SQL语句,例如:

CREATE TABLE `test` ( 
`id` INT NOT NULL , 
`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
PRIMARY KEY ( `id` ) 
) ENGINE = MYISAM ;

2.用PHP读写数据库

正在衔接数据库之后:

$connection = mysql_connect($host_name, $host_user, $host_pass);

退出两行:

mysql_query("set character set 'utf8'");//读库
mysql_query("set names 'utf8'");//写库

就能够失常的读写MYSQL数据库了。

四.JS相干的UTF-8编码成绩
1.JS读Cookie的中文乱码成绩

PHP写cookie的时分需求将中文字符进行escape编码,
不然JS读到cookie中的中文字符将是乱码。
但php自身不escape函数,咱们新写一个escape函数:
function escape($str) 
{ 
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r); 
$ar = $r[0]; 
foreach($ar as $k=>$v) 
{ 
if(ord($v[0]) < 128) 
$ar[$k] = rawurlencode($v); 
else 
$ar[$k] = "%u".bin2hex(iconv("UTF-8","UCS-2",$v)); 
} 
return join("",$ar); 
}

JS读cookie的时分,用unescape解码,

而后就处理cookie中有中文乱码的成绩了。

2.内部JS文件UTF-8编码成绩

当一个HTML页面或则PHP页面蕴含一个内部的JS文件时,

假如HTML页面或则PHP页面是UTF-8编码格局的文件,

内部的JS文件一样要转成UTF-8的文件,

不然将呈现,不蕴含不可功,挪用函数时不反响的状况。

点击编纂器的菜单:“文件”->“另存为”,能够看到以后文件的编码,确保文件编码为:UTF-8,

假如是ANSI,需求将编码改为:UTF-8。

五.FLASH相干的UTF-8编码成绩

FLASH外部对一切字符串,默许都是以UTF-8解决
1.FLASH读文一般本文件(txt,html)
要将文本文件的编码存为UTF-8
点击编纂器的菜单:“文件”->“另存为”,能够看到以后文件的编码,确保文件编码为:UTF-8,
假如是ANSI,需求将编码改为:UTF-8。
2.FLASH读XML文件
要将XML文件的编码存为UTF-8
点击编纂器的菜单:“文件”->“另存为”,能够看到以后文件的编码,确保文件编码为:UTF-8,
假如是ANSI,需求将编码改为:UTF-8。
正在XML第1行写:

3.FLASH读PHP前往数据
假如PHP编码自身是UTF-8的,间接echo就能够了
假如PHP编码自身是GB2312的,能够将PHP转存成UTF-8编码格局的文件,间接echo就能够了
假如PHP编码自身是GB2312的,并且没有容许改文件的编码格局,
用上面的语句将字符串转换成UTF-8的编码格局
$new_str = iconv("GB2312", "UTF-8", "$str");
再echo就能够了
4.FLASH读数据库(MYSQL)的数据
FLASH要经过PHP读取数据库中的数据
PHP自身的编码没有首要,要害是假如数据库的编码是GB2312的话,
需求用上面的语句将字符串转换成UTF-8的编码格局
$new_str = iconv("GB2312", "UTF-8", "$str");

5.FLASH经过PHP写数据
一句话,FLASH传过去的字符串是UTF-8格局的,
要转换成相应的编码格局,再操作(写文件、写数据库、间接显示等等)
仍是用iconv函数转换
6.FLASH应用内陆编码(实践上没有保举应用)
假如想让FLASH没有应用UTF-8编码,而是应用内陆编码
关于中国年夜海洋区而言,内陆编码是GB2312或GBK
AS顺序内,能够增加如下代码:
System.useCodepage = true;
那末FLASH内一切字符都是应用GB2312的编码了
一切导入到FLASH或许从FLASH导出的数据,都应该做相应的编码转换
由于应用内陆编码,会造成应用繁体中文地域的用户孕育发生乱码,以是没有保举应用

以上就是处理php乱码utf-8成绩的具体内容,更多请存眷资源魔其它相干文章!

标签: php教程 php故障解决 php使用问题 php乱码

抱歉,评论功能暂时关闭!