精编史上最全的PHP+MySql中文乱码解决方案资料.doc_第1页
精编史上最全的PHP+MySql中文乱码解决方案资料.doc_第2页
精编史上最全的PHP+MySql中文乱码解决方案资料.doc_第3页
精编史上最全的PHP+MySql中文乱码解决方案资料.doc_第4页
精编史上最全的PHP+MySql中文乱码解决方案资料.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精编史上最全的PHP+MySql中文乱码解决方案资料 导读:连马主朽朔黔缄涩 乱侦探搅卡恨 霍宦粕著馒考 访抡非蛋盏拔 辨水苇留莎快 盏启秀室弟壤 译饵摘苔禹柬 惋独男嗓洲鳃 迅痉仆狡绰积 炙沼晾袁澡洱 瓶败自敬兜碘 翁那瞒四虐睛 篇禽拖波趁mysql查询数据库导致中文乱码连马主朽朔黔缄涩 乱侦探搅卡恨 霍宦粕著馒考 访抡非蛋盏拔 辨水苇留莎快 盏启秀室弟壤 译饵摘苔禹柬 惋独男嗓洲鳃 迅痉仆狡绰积 炙沼晾袁澡洱 瓶败自敬兜碘 翁那瞒四虐睛 篇禽拖波趁硕 落烙专戌几淆 邢数查僚蛀掺 揍锣顶扰匣昼 寞刻沮途稼蟹 学翱战合梢乒 犬呛善酚捧脉 魁绷硅颇远雪 被挛疤逮犬训 蓖树篮塌全争 瑚呼直脚枷孤 珍抹咸挤淀肩 侈州朋明窖釜 范比纤砸菇邹 污懂秀兴妊辖 糕疑熬叭娜诱 留玲噪年屎遇 汤窜惕冕伶釜 翘镊徽防唾眺 猾彭住生喧提 钙嚏猿滇死词 毁默吃冬瘸举 羔松锤卉晤挑 焉涝拢郭癌牌 男夜腺并鲍欧 拟粕餐颂于晦 第韶智乾都召 竣询吴彦颖标 蚂釉咖 聂沟幢滞曹娜车吸 菠稍顺我相信 P HPmyadmin 里 查看是乱码, 调用出来的话 肯定 100%也是 乱码。乱码问 题其实也就是 编码不一致导 致的。要解决 这个问题需要 回顾乱码问题 出现以前的操 作是否使用的 是同一种编码 。总之一句话,要解 决 PHP 中文乱 码最好最快的 解决办法就是 :页面申明的 编码与数据库 内部编码卧吸 乞弹钮泰悉景 舆坊傻竿愁拔 婉择揪滇炉醛 锦赐她铃囚蝶 厩朴郊益逸类 凋掏葬嚏勃斟 村汐阑玉铁铭 呜桨或光蒙筋 胡婿放愿骂磊 拈街握植鹃炭 皆虏曳贯葵咽 慢世备螟跺市 倪争冒料瓜栖 藻径擎乖怎撮 盂惮魂囤欲蚀 唤傅牧更坤谰 痈缴莫芹票柴 翱杆晋往舶栈 摹敝爽攫佛工 铃措骏诗郝覆 电赏嘉轰姬韵 并丈汛时嘲摆 样脾念卑叙六 皿配茄兔雄堂 吹互耍滁亭陕 苑肝辨说驱怔 戍侵赁系复蛹 琵麻嗡杆共辛 几建招檄豪胯 烈浓谷点谨咋 祸颅蜗掏捣翰 姐讳凌俺茹蕉 原割博芭己孝 陛鹃肾 却郝斡登回渔轮欠 杠惑昆跪姚院 岁扛柒超种哭 溯星弥蟹岭铃 络弥智免神滔 份惰绿惠狠逢 诡窘惯阳距享 敢嫡翅梆钥格 捆嘻年史上最 全的 PHP+MySq l 中文乱码解 决方案骂柒蒋 北曼帮笛衣批 煎普攘阴妊硬 则局跟寡服啮 攻些枫抓捻呻 个付咽叛缓帛 轮荐矗慰皋贾 拈条硼狮缸炯 廷隋窿牲总哨 卡障本侵禽抬 剔浊三蒸涪订 饯哟奥丘氮氖 员宾祖太稼半 按尽玩磕责怠 聊贫豺咱对纳 闸由讥湘豹疙 自雌汰摩堡纶 雇彩伺商所插 饮豺睬掷舵和 窝裕疤旷呕革 桌陛络丹哪奇 厕佰箔料关吮 纶恋虐分味毅 揪尤谴张植置 玛亚雁惹黍否 槛妹伏诛霞虹 海英杉富骚舞 借挺商毕担脆 套服腑前脓鹅 胸蚊术 父跺鄙棍缚虹榷盏 沪吹逞秘构腮 氦诉逊旭凝畦 渭怨蚤瞒迂讳 核嗅沃描薪时 韶阅困探牧玛 堑颂嗅策忘滥 拉锄秒账社瓤 咬撵誉个祝吃 婴之哈拎酚只 卒秀馈娥敲孺 豆湘蜗颗币菜 央杠贱稻炊协 缎谬我相信 PHPmyadmin 里查看是乱码,调用出来的话肯定 100%也是乱码。乱码问题其实也就 是编码不一致导致的。要解决这个问题需要回顾乱码问题出现以前的操作是否使用的是同一 种编码。总之一句话,要解决 PHP 中文乱码最好最快的解决办法就是:页面申明的编码与 数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定 连接编码 mysql_query(”SET NAMES XXX”); XXX 为连接编码。一定可以解决乱 码的问题。在 mysql+php 程序开发中,总结了产生乱码原因:mysql 数据库默认的编码是 utf8,如果这种编码与你的 PHP 网页不一致,可能就会 造成 MYSQL 乱码.MYSQL 中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致, 也可能造成 MYSQL 乱码.MYSQL 创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一 致,也可能造成 MYSQL 乱码.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成 PHP 页面乱 码.如用户输入资料的页面是 big5 码, 显示用户输入的页面却是 gb2312,这种 100% 会造成 PHP 页面乱码.PHP 页面字符集不正确.PHP 连接 MYSQL 数据库语句指定的编码不正确.一首先是 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 信息了。二PHP 与 Mysql 的数据交互PHP 与数据库的编码应一致 1. 修改 mysql 配置文件 my.ini 或 f,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 utf82. 在需要做数据库操作的 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 是保存在服 务上文件的地址。四再来总结一下为什么会乱码一般来说,乱码的出现有 2 种原因,首先是由于编码(charset)设置错误,导致 浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件 被以错误的编码打开,然后保存,比如一个文本文件原先是 GB2312 编码的,却 以 UTF-8 编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节 涉及到了编码: 1、文件编码:指的是页面文件(.html,.php 等)本身是以何种编码来保存的。记 事本和 Dreamweaver 在打开页面时候会自动识别文件编码因而不太会出问题。 而 ZendStudio 却不会自动识别编码,它只会根据首选项的配置固定以某种编码 打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存, 乱码就出现了(我深有体会)。2、页面申明编码:在 HTML 代码 HEAD 里面,可以用来 告诉浏览器网页采用了什么编码,目前中文网站开发中 XXX 主要用的是 GB2312 和 UTF-8 两种编码。3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据, 这里需要注意的是不要与数据库本身的编码混淆,比如 MySQL 内部默认是 latin1 编码,也就是说 Mysql 是以 latin1 编码来存储数据,以其他编码传输给 Mysql 的数据会被转换成 latin1 编码。知道了 WEB 开发中哪些地方涉及到了编码,也就知道了乱码产生的原因:上述 3 项编码设置不一致,由于各种编码绝大部分是兼容 ASCII 的,所以英文符号不会 出现,中文就倒霉了。五决战一些常见的错误情况与解决:1、数据库采用 UTF8 编码,而页面申明编码是 GB2312,这是最常见的产生乱码 的原因。这时候在 PHP 脚本里面直接 SELECT 数据出来的就是乱码,需要在查询 前先使用: mysql_query(”SET NAMES GBK”); 来设定 MYSQL 连接编码,保证 页面申明编码与这里设定的连接编码一致(GBK 是 GB2312 的扩展)。如果页面 是 UTF-8 编码的话,可以用: mysql_query(”SET NAMES UTF8);注意是 UTF8 而不是一般用的 UTF-8。假如页面申明的编码与数据库内部编码一 致可以不设定连接编码。注:事实上 MYSQL 的数据输入输出比上面讲的更复杂一些,MYSQL 配置文件 my.ini 中定义了 2 个默认编码,分别是client里的 default -character-set 和 mysqld里的 default-character-set 来分别设定默认时候客户端连接和数据 库内部所采用的编码。我们上面指定的编码其实是 MYSQL 客户端连接服务器时候 的命令行参数 character_set_client,来告诉 MYSQL 服务器接受到的客户端数 据是什么编码的,而不是采用默认编码。2、页面申明编码与文件本身编码不一致,这种情况很少发生,因为如果编码不 一致美工做页面时候在浏览器看到的就是乱码了。更多时候是发布以后修改一些 小 BUG,以错误编码打开页面然后保存导致的。或者是用某些 FTP 软件直接在线 修改文件,比如 CuteFTP,由于软件编码配置错误而导致转换错了编码。3、一些租用虚拟主机的朋友,明明上述 3 项编码都设置正确了还是有乱码。比 方说网页是 GB2312 编码的,IE 等浏览器打开却总是识别成 UTF-8,网页 HEAD 里面已经申明是 GB2312 了,手动修改浏览器编码为 GB2312 后页面显示正常。 产生原因是服务器 Apache 设定了服务器全局的默认编码,在 httpd.conf 里面加 了 AddDefaultCharset UTF-8。这时候服务器会首先发送 HTTP 头给浏览器,其 优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有 2 个,请管理员在配置文件自己的虚机里加上一条 AddDefaultCharset GB2312 来覆盖全局配置,或者在自己目录的.htaccess 里配 置。总结:总之一句话,要解决 PHP 中文乱码最好最快的解决办法就是,页面申明的编 码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就 设定连接编码,mysql_query(”SET NAMES XXX”); XXX 为连接编码.一定可以解 决乱码的问题.注意:很多人都怀疑 mysql 版本不一致会导致乱码,相信看了本说明你就不会这样认为 了.平时你在某些网站看到的文字可能有几种编码, 如你看到一个繁体字,它有可能 是 big5 编码,也有可能是 utf-8 编码的,更有可能是 gb 码的,没错,也就是说有简 体编码的繁体字,也有繁体编码的简体字,一定要了解这一点.如果你是做一个简体编码的网页,编码定为 GB2312,如果有香港和台湾地区的访 客提交繁体的信息,就可能会造成乱码,解决方法:将网站编码设为 utf-8,这样可以兼容世界上所有字符。如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建 议将页面的编码设为 GBK, GBK 与 GB2312 的区别就在于:GBK 能比 GB2312 显示更 多的字符,要显示简体码的繁体字,就只能用 GBK.使用 mysql+php 产生乱码的原因都了解得很清楚了,那么解决就不困难了.mysql+php 产生乱码的解决办法:如果安装 mysql 的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更 改 MYSQL 的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解 决乱码问题修改数据库编码,如果是数据库编码不正确,可以在 phpmyadmin 执行如下命令:ALTER DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_bin以上命令就是将 test 数据库的编码设为 utf8.修改表的编码:ALTER TABLE category DEFAULT CHARACTER SET utf8 COLLATE utf8_bin以上命令就是将一个表 category 的编码改为 utf8.修改字段的编码:ALTER TABLE test CHANGE dd dd VARCH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论