序言
本文主要给你们介绍了关于php英文乱码问题的终极解决方案,分享下来供你们参考学习,在开始之前,我们先来说说为何会出现英文乱码?
好多菜鸟同学学习PHP的时侯,发觉程序中的英文在输出的时侯会出现乱码的问题,这么为何会出现这些乱码的情况呢?通常来说,乱码的出现有2种缘由,一种是因为编码(charset)设置错误,致使浏览器以错误的编码来解析,因而出现了满屏乱七八糟的“天书”,第二种就是文件被以错误的编码打开,之后保存,例如一个文本文件原本是GB2312编码的,却以UTF-8编码打开再保存,还会出现乱码的问题。本篇文章,就带你们了解一下,如何解决php中乱码的问题。
我们将乱码情况分为以下几种linux 文件中文乱码,有须要的可以对照下边的几种情况有针对性的解决乱码问题
第一种:解决HTML中英文乱码问题技巧
1.php文件本身的编码与网页的编码应匹配
a.若果欲使用gb2312编码,这么php要输出头:header(“Content-Type:text/html;charset=gb2312"),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开linux操作系统界面,另存为选择编码为ANSI,覆盖源文件。
b.若果欲使用utf-8编码,这么php要输出头:header(“Content-Type:text/html;charset=utf-8"),静态页面添加,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,通常utf-8文件开头会有BOM,假如使用session才会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删掉,再保存就可以除去BOM信息了。
2.php本身不是Unicode的linux系统界面,所有substr之类的函数得改成mb_substr(须要装mbstring扩充);或则用iconv转码。
假如你的HTML文件文件出现了乱码问题,这么你可以在head标签上面加入UTF8编码(国际化编码):UTF-8是没有国家的编码,也就是独立于任何一种语言,任何语言都可以使用的。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
示例
我们现今的HTML5文件,设置编码更为简单,像下边这样
第二种、HTML和PHP混和的页面解决方案
怎么是HTML和PHP混编,不仅根据第一个方式所说的操作之外,还须要在PHP文件的最前面加入这句代码:
第三种、纯PHP页面的英文乱码问题(数据是静态的)
假如你的PHP页面出现了乱码linux 文件中文乱码,只须要在页面的开始处加入下边代码就可以了。
第四种、PHP+Mysql英文乱码问题
这个不仅根据第三种所说的操作之外,还要在你的数据查询/更改/降低之前加入数据库编码。并且,值得注意的是,这儿的UTF8和之前的不一样,中间是没有横线的。
怎样你使用的MySQL版本在4.1或更高版本,可以在链接数据库操作后,设置一个字符编码,像下边这样
UTF-8编码只是其中一种编码,假若不想使用utf-8编码,也可以使用其他编码,只需将UTF-8换成你想使用的编码就可以,目前英文网站开发中主要用的是GB2312和UTF-8两种编码。
有一点要注意:在须要做数据库操作的php程序前加的mysql_query("setnames'编码'");编码,一定要和php编码一致,假如php编码是gb2312那mysql编码就是gb2312,倘若是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了
第五种.PHP与操作系统相关
Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数假如是utf-8编码会出现错误,例如move_uploaded_file()、filesize()、readfile()等,这种函数在处理上传、下载时常常会用到,调用时可能会出现下边的错误:
Warning:move_uploaded_file()[function.move-uploaded-file]:failedtoopenstream:Invalidargumentin...
Warning:move_uploaded_file()[function.move-uploaded-file]:Unabletomove''to''in...
Warning:filesize()[function.filesize]:statfailedfor...in...
Warning:readfile()[function.readfile]:failedtoopenstream:Invalidargumentin..
在Linux环境下用gb2312编码尽管不会出现这种错误,但保存后的文件名出现乱码造成难以读取文件,这时可先将参数转换成操作系统辨识的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现英文名称文件的上传、下载。
或许还有更好的解决方式,彻底与系统脱离,也就不用考虑系统是何编码。可以生成一个只有字母和数字的序列作为文件名,而将原先带有英文的名子保存在数据库中,这样调用move_uploaded_file()就不会出现问题,下载的时侯只需将文件名改为原先带有英文的名子。实现下载的代码如下
header("Pragma:public");
header("Expires:0");
header("Cache-Component:must-revalidate,post-check=0,pre-check=0");
header("Content-type:$file_type");
header("Content-Length:$file_size");
header("Content-Disposition:attachment;filename="$file_name"");
header("Content-Transfer-Encoding:binary");
readfile($file_path);
$file_type是文件的类型,$file_name是原先的名子,$file_path是保存在服务上文件的地址。
总结
以上就是这篇文章的全部内容了,希望本文的内容对你们的学习或则工作能带来一定的帮助,假如有疑惑你们可以留言交流,感谢你们对365建站网的支持