`
jimphei
  • 浏览: 39608 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

解决php中文乱码

    博客分类:
  • php
阅读更多

一.首先是PHP网页的编码

1.php文件本身的编码与网页的编码应匹配

a.如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。

b.如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用 session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。

2.php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。

二.PHP与Mysql的数据交互

PHP与数据库的编码应一致

1.修改mysql配置文件my.ini或my.cnf,mysql最好用utf8编码

[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-storage-engine=MyISAM
在[mysqld]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'

2.在需要做数据库操作的php程序前加mysql_query("set names '编码'");,编码和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]:failed to open stream: Invalid argument in ...

Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...

Warning: filesize() [function.filesize]: stat failed for ... in ...

Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..

在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是保存在服务上文件的地址。

分享到:
评论

相关推荐

    完美解决PHP中文乱码

    ### 完美解决PHP中文乱码 #### 一、PHP网页的编码问题 在处理PHP中文乱码问题时,首要任务是确保PHP文件本身的编码与其所声明的网页编码相匹配。这涉及到设置正确的HTTP头部信息以及调整文件的实际编码格式。 ###...

    完美解决PHP中文乱码问题

    ### 完美解决PHP中文乱码问题:深入解析与实用指南 #### 一、理解PHP中文乱码问题 在PHP编程中,中文乱码问题是开发者经常遇到的挑战,尤其是在处理多语言网站或应用时。这一问题主要源于字符集编码不一致,即数据...

    php中文乱码.zip

    下面将详细阐述如何理解和解决PHP中文乱码的问题。 首先,我们需要了解几个基本概念: 1. 字符编码:如GBK、UTF-8等,它们规定了字符集中的每个字符如何用二进制表示。在Web开发中,UTF-8是最常用的一种编码,因为...

    php生成pdf,解决中文乱码

    要解决中文乱码问题,我们需要做以下几步: 1. 引入TCPDF库:在项目中引入TCPDF库,可以通过Composer安装或者直接下载源代码。 2. 设置字符集:在创建TCPDF对象时,必须指定字符集为UTF-8,例如: ```php ...

    php中文乱码问题 初学php最学见的问题

    ### PHP中文乱码问题解析及解决方案 ...综上所述,解决PHP中文乱码问题的关键在于确保各个层面(HTML文档、PHP脚本、数据库连接)的字符集保持一致。按照上述步骤进行设置,可以有效避免中文乱码问题的发生。

    php中文乱码解决办法

    以下是一些关于如何解决PHP中文乱码问题的详细方法: 首先,我们需要理解编码的基本概念。编码决定了字符集的表示方式,如GBK(GB2312的扩展)和UTF-8是最常见的中文编码格式。GBK主要在中国大陆使用,而UTF-8是一...

    PHP中文乱码问题解决方法

    PHP中文乱码问题解决方法 PHP中文乱码是PHP开发中的常见问题之一。该问题可能发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关。解决该问题需要从多方面入手,包括PHP网页的编码、PHP与MySQL的...

    php中url地址栏传参数中文乱码解决方法汇总

    php 中 URL 地址栏传参数中文乱码解决方法汇总 PHP 中 URL 地址栏传参数中文乱码解决方法汇总是指在 PHP 编程中,如何解决 URL 地址栏传参数中文乱码的问题。这个问题是由于浏览器和服务器之间的编码问题引起的。 ...

    解决Flex 中文乱码

    在开发Flex应用程序时,我们经常会遇到中文乱码的问题,这主要源于AS3(ActionScript 3...对于`解决Flex中文乱码.txt`这个文件,它可能包含了具体的代码示例或更详细的解决步骤,你可以参考其中的内容来解决你的问题。

    PHP+MySql中文乱码解决办法

    ### PHP+MySQL中文乱码解决办法详解 ...通过以上方法,我们可以有效地解决PHP+MySQL开发过程中出现的中文乱码问题。关键在于确保各个环节的编码设置一致,并针对特定的操作系统进行适当的编码转换处理。

    php中文乱码解决方案

    ### PHP中文乱码解决方案 #### 一、PHP网页的编码 **1. php文件本身的编码与网页的编码应匹配** 为了确保PHP文件正确地显示中文字符,必须保持PHP文件内部编码与网页显示编码的一致性。 - **使用GB2312编码** -...

    PHP+MySql中文乱码解决方案

    解决PHP+MySQL中文乱码问题的关键在于确保各个组件之间编码的一致性。通过调整数据库、PHP脚本以及操作系统的字符集设置,可以有效地避免乱码问题的发生。在实际开发过程中,根据具体情况灵活调整这些设置是非常重要...

    解决php截取中文出现乱码

    具体来说,可以通过设置`substr()`函数的第四个参数`encoding`为`"UTF-8"`来解决中文乱码的问题。不过,在实际应用中,更推荐使用`mb_substr()`函数,它支持多字节字符串,并且在处理多语言环境下的文本时更加灵活。...

    PHP中文乱码.docx

    以下是一些解决PHP中文乱码问题的关键知识点: **一、PHP网页编码设置** 1. **PHP文件编码与网页编码匹配** - 如果选择GBK(GB2312)编码,应在PHP文件头部添加`header("Content-Type: text/html; charset=gb2312...

    PHP中文乱码处理总结.docx

    总结来说,解决PHP中文乱码问题关键在于保持编码的一致性,从文件保存、网页输出、数据库设置、命令行环境到HTTP通信,都需要设定为统一的UTF-8编码。通过以上步骤,可以有效地预防和解决PHP中文乱码问题。

    史上最全的PHP+MySql中文乱码解决方案.docx

    解决PHP中文乱码问题的第一步是确保PHP网页的编码正确。这涉及到两方面:PHP文件本身和网页内容的声明。对于GBK编码,可以在PHP文件头部添加`header("Content-Type: text/html; charset=gb2312")`,静态HTML页面则需...

Global site tag (gtag.js) - Google Analytics