在php中中文乱码解决方法

最最觉的是ajax post get 中文乱码了,用ajax传递中文时..ff会很聪明的自动将中文字符转成十六进制.而bc的ie却非得自己处理..-____!!

最简单的方法就是在需要转义的地方使用js的内置函数 encodeuricomponent,最初是用escape做中文转义..注意它与 encodeuricomponent 的区别

一.php中其它引起乱码解决方法分析

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

  a.如果欲使用gb2312编码,那么php要输出头:header(“content-type: text/html; charset=gb2312"),静态页面添加,所有文件的编码格式为ansi,可用记事本打开,另存为选择编码为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的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。

二.php与mysql的数据交互

php与数据库教程的编码应一致

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

  1. [mysql] 
  2. default-character-set=utf8 
  3. [mysqld] 
  4. default-character-set=utf8 
  5. default-storage-engine=myisam 
  6. 在[mysqld]下加入: 
  7. default-collation=utf8_bin 
  8. 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()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:

  1. warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: invalid argument in … 
  2. warning: move_uploaded_file()[function.move-uploaded-file]:unable to move '' to '' in … 
  3. warning: filesize() [function.filesize]: stat failed for … in … 
  4. warning: readfile() [function.readfile]: failed to open stream: invalid argument in .. 

在linux环境下用gb2312编码虽然不会出现这些错误,但保存后的文件名出现乱码导致无法读取文件,这时可先将参数转换成操作系统识别的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的上传、下载。

其实还有更好的解决方法,彻底与系统脱离,也就不用考虑系统是何编码。可以生成一个只有字母和数字的序列作为文件名,而将原来带有中文的名字保存在数据库中,这样调用move_uploaded_file()就不会出现问题,下载的时候只需将文件名改为原来带有中文的名字。实现下载的代码如下

  1. header("pragma: public"); 
  2. header("expires: 0"); 
  3. header("cache-component: must-revalidate, post-check=0, pre-check=0"); 
  4. header("content-type: $file_type"); 
  5. header("content-length: $file_size"); 
  6. header("content-disposition: attachment; filename="$file_name""); 
  7. header("content-transfer-encoding: binary"); 
  8. readfile($file_path); 

$file_type是文件的类型,$file_name是原来的名字,$file_path是保存在服务上文件的地址.

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 在php中中文乱码解决方法

1 评论

  1. Hi, just required you to know I he added your site to my Google bookmarks due to your layout. But seriously, I believe your internet site has 1 in the freshest theme I??ve came across.Metropol Halı Karaca Halı Öztekin ve Selçuklu Halı Cami Halısı ve Cami Halıları Türkiye’nin En Büyük Cami Halısı Fabrikasıyız…

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡