`
sibyl_pisces
  • 浏览: 146030 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

PHP中文乱码问题

    博客分类:
  • 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是保存在服务上文件的地址。

 

 

http://www.phpzt.com/phpexper/20100408/51.html

分享到:
评论

相关推荐

    PHP中文乱码问题解决方法

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

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

    ### PHP中文乱码问题解析及解决方案 在学习PHP过程中,遇到中文乱码是一个非常常见的问题。这主要是因为编码设置不正确导致的。本篇文章将详细分析PHP中文乱码产生的原因,并提供一系列有效的解决方法。 #### 一、...

    完美解决PHP中文乱码问题

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

    php中文乱码.zip

    解决PHP中文乱码问题的步骤: 1. 检查并统一PHP源文件编码。 2. 确保数据库配置正确,使用相同的字符编码。 3. 在每个PHP页面顶部添加`header('Content-Type: text/html; charset=utf-8')`,设定正确的字符编码。 4...

    mysql+php中文乱码问题及mysql时间函数.pdf

    首先,MySQL+PHP中文乱码问题主要源于编码不一致。数据库、表、字段以及网页的编码设置必须统一。如果MySQL数据库的默认编码是UTF-8,而PHP页面使用了GBK或其他编码,就可能出现乱码。解决这个问题的方法包括: 1. ...

    mysql+php中文乱码问题及mysql时间函数借鉴.pdf

    总之,解决MySQL+PHP中文乱码问题主要涉及确保从数据库到用户的整个数据流程的编码一致性,并适当利用MySQL的时间函数进行日期和时间的格式化处理。只要理解并正确应用这些知识,就能有效地防止和解决乱码问题。

    mysql+php中文乱码问题及mysql时间函数.docx

    【MySQL+PHP中文乱码问题】 在MySQL与PHP结合使用时,中文乱码问题是一个常见的困扰。这主要涉及到字符编码的匹配问题。MySQL数据库默认使用UTF-8编码,但当网页编码、数据库编码、表编码或字段编码不一致时,就可能...

    完美解决PHP中文乱码

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

    PHP之JPgraph横坐标中文乱码问题

    ### PHP之JPgraph横坐标中文乱码问题解析 在处理PHP与JPgraph图表库时,经常遇到的一个问题是中文字符在横坐标上显示为乱码。本文将深入探讨这一问题,并提供一个具体的解决方案。 #### 问题描述 在使用PHP结合...

    PHP输出中文乱码问题.docx

    总之,PHP中文乱码问题的解决需要综合考虑PHP文件、数据库和操作系统的编码设置。确保每个环节的编码一致,以及正确处理不同编码之间的转换,是避免乱码的关键。同时,对于文件名的处理,可以采取生成无中文的临时...

    php生成pdf,解决中文乱码

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

    mysql+php中文乱码问题及mysql时间函数.rar

    本资料主要探讨了在使用MySQL和PHP时可能遇到的中文乱码问题以及MySQL的时间处理函数。以下是对这两个主题的详细说明: 一、MySQL与PHP中的中文乱码问题 1. 编码设置:中文乱码通常是因为编码不一致导致的。确保...

    apache+mysql+php 乱码问题.docx

    通过这三个文件的配置,可以解决 Apache、MySQL 和 PHP 的乱码问题,从而确保 Web 应用程序正确地显示中文。 此外,还需要注意,在使用 PHPMyAdmin 时,需要选择正确的语言和编码,以便正确地显示中文。在 MySQL 的...

    PHP+MySql中文乱码解决办法

    在使用PHP+MySQL进行开发的过程中,中文乱码问题是常见的一个问题。乱码现象通常发生在从数据库查询中文数据时,显示出来的中文变成了不可识别的符号或者问号。产生这种现象的主要原因是**编码不一致**。 1. **...

    Linux php出现中文乱码的解决方法.docx

    Linux PHP 中文乱码问题是 PHP 开发中常见的问题之一。它是由于字符编码设置不当引起的。今天,我们将探讨 Linux PHP 中文乱码的解决方法。 一、修改 PHP 配置文件 在 Linux 中,PHP 的配置文件位于 `/etc/...

    PHP中文乱码.docx

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

    PHP向mysql插入中文乱码问题,php文件内容写入数据库!

    在PHP开发过程中,遇到中文乱码问题是在与MySQL数据库交互时常见的困扰。这个问题通常是由于编码不一致或处理不当导致的。以下将详细分析并解决PHP向MySQL插入中文乱码问题,以及如何正确处理PHP文件内容写入数据库...

Global site tag (gtag.js) - Google Analytics