PHP中文乱码解决方案
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-15 21:36:00 浏览: 评论:0
PHP+MYSQL做网站开发通常都会碰到浏览器输出中文字符时乱码,这个问题的原因主要是因为HTML内容编码,PHP文件编码和MySQL数据库编码这三者不一致造成的。今天我们来具体探讨下出现中文乱码后的解决方案。
汉字乱码真是一个悲催的事情,JAVA讨厌汉字,PHP也不喜欢汉字;
Java乱码最终使用了spring给出的过滤器来过滤,处处过滤,其实影响了速度,不过没有办法,汉字就是W国首先不考虑的事情;
想不到PHP也是乱码处处在,当你使用亲兄弟MySQL的时候,汉字显得那么亲切,从未考虑过他会变成天书;不过为了和其他其他交互,把PHP的手伸到SQL SERVER的时候,乱码来了,原因是第三方系统用的GBK编码;
哎,转换吧;
1,PHP自带的转换函数ICONV,一个高大上的函数;
string iconv ( string $in_charset , string $out_charset , string $str )
使用DEMO:
- <?php
- $text = "This is the Euro symbol '€'.";
- echo 'Original : ', $text, PHP_EOL;
- echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
- echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
- echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
- ?>
大家都推荐的函数,不过使用之后无法转换,没有错误,字符也没有转换,NO!
2,另辟蹊径,还有一个大家质疑效率不高的函数,不过无论如何,先实现再考虑其他三,代码如下:
- //检查该函数是否可用
- echo function_exists('mb_convert_encoding');
- //检测当前编码
- echo mb_detect_encoding($val, "GBK, GB2312, UTF-8");
- //转换编码,把CP936(就是GBK)转换成UTF-8
- $v=mb_convert_encoding ($val, "UTF-8", "CP936");
结果成功了;
好吧,先用着吧,为了转换数据库查询的结果集,制作一个转换函数:
1,函数“乱码克星”:
- // $fContents 字符串
- // $from 字符串的编码
- // $to 要转换的编码
- function auto_charset($fContents,$from='gbk',$to='utf-8'){
- $from = strtoupper($from)=='UTF8'? 'utf-8':$from;
- $to = strtoupper($to)=='UTF8'? 'utf-8':$to;
- if( strtoupper($from) === strtoupper($to) || emptyempty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){
- //如果编码相同或者非字符串标量则不转换
- return $fContents;
- }
- if(is_string($fContents) ) {
- if(function_exists('mb_convert_encoding')){
- return mb_convert_encoding ($fContents, $to, $from);
- }else{
- return $fContents;
- }
- }
- elseif(is_array($fContents)){
- foreach ( $fContents as $key => $val ) {
- $_key = auto_charset($key,$from,$to);
- $fContents[$_key] = auto_charset($val,$from,$to);
- if($key != $_key )
- unset($fContents[$key]);
- }
- return $fContents;
- }
- else{
- return $fContents;
- }
- }
2,使用:
- //打印输出查询结果(假设你的结果)
- $arr=array();
- while($list=mssql_fetch_row($row))
- {
- $arr[]=$list;
- }
- $s=auto_charset($arr,'gbk','utf-8');
- //打印试试,在浏览器设置编码为UFT-8,看没有乱码
- print_r($s);die();
Tags: PHP中文乱码
相关文章
- ·在php中中文乱码解决方法(2013-11-29)
- ·PHP读MYSQL中文乱码的解决方法(2014-09-11)
- ·php中文乱码问题和MySql出现中文乱码的解决方法(2014-09-11)
- ·PHP Header下载文件在IE文件名中文乱码问题(2014-09-13)
- ·php ord 函数与中文乱码解决方法(2014-09-19)
- ·php生成二维码中文乱码问题解决方法(2014-09-20)
- ·php中文乱码问题解决方法(2014-09-21)
- ·PHP中文文件名输出乱码解决方法(2014-09-21)
- ·解决PHP中文乱码的4项小技巧(2015-04-04)
- ·PHP DOMDocument保存xml时中文出现乱码(2015-04-08)
- ·php中文乱码怎么办如何让浏览器自动识别utf-8(2020-08-27)
- ·解决php接收shell返回的结果中文乱码问题(2020-08-29)
- ·PHP中使用file_get_contents抓取网页中文乱码问题解决方法(2021-05-03)
- ·php生成二维码时出现中文乱码的解决方法(2021-05-03)
- ·PHP MPDF中文乱码的解决方式(2021-06-29)
- ·Linux php 中文乱码的快速解决方法(2021-08-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)