PHP中文乱码解决方法

合集下载

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

php中url地址栏传参数中文乱码解决方法汇总
lc_ctype=”zh_cn.utf-8″
lc_numeric=”zh_cn.utf-8″
lc_time=c
lc_collate=c
lc_monetary=”zh_cn.utf-8″
lc_messages=”zh_cn.utf-8″
lc_paper=”zh_cn.utf-8″
lc_name=”zh_cn.utf-8″
使用$gonghui = iconv(“gb2312″,”UTF-8″,$gonghui);另一方法代码
/* 多字节字符串编码转换函数
*
* @param string str 需要进行编码转换的字符串
* @param string to_encoding 指定转换为某种编码,如:gb2312、gbk、utf-8等
mb_convert_encoding 函数为php内部多字节字符串编码转换函数,可以在有需要的使用场合,几乎支持所有编码。PHP >= 4.0.6、 5 版本支持。
直接获取 reg.php?gh=某某;
//工会登入参
$gonghui = $_GET['gh'];
获得的$gonghui 为gb2312编码 输出到utf-8网页上显示乱码
$ChineseName=”我的名字,是中文的哦”;
$EncodeStr=urlencode($ChineseName);
echo “<a href=/cgi/personal.cgi?name=$EncodeStr>我的名字</a>”;
?>
url解码
还原 URL 编码字符串。
语法: string urldecode(string str);

php解决中文解压缩乱码的方法

php解决中文解压缩乱码的方法

php解决中文解压缩乱码的方法在处理中文解压缩的过程中,乱码问题常常是由于编码格式不匹配所导致的。

为了解决这个问题,我们需要确保源文件的编码格式和解压缩函数的编码参数一致,同时设置正确的输出编码格式。

以下是一些具体的解决方法:一、确保源文件的编码格式在解压缩之前,首先要确定源文件的编码格式。

常见的编码格式包括UTF-8、GBK等。

你可以使用PHP的mb_detect_encoding函数来检测源文件的编码格式。

例如:$fileContent=file_get_contents('source.zip');$encoding=mb_detect_encoding($fileContent);echo"File Encoding: ".$encoding;上述代码将检测源文件的编码格式并输出。

确保源文件的编码格式与你的需求相匹配。

二、设置解压缩函数的编码参数在PHP中,你可以使用zip_read函数来读取ZIP文件的内容。

在调用该函数之前,你需要设置正确的编码参数,以确保解压缩过程中不会出现乱码问题。

你可以使用zip_entry_open函数来获取ZIP条目的编码格式,并将其设置为解压缩函数的编码参数。

例如:$zip=zip_open('source.zip');if ($zip) {$entry=zip_read($zip);if ($entry) {$encoding=zip_entry_open($zip, $entry);zip_entry_close($entry);zip_close($zip);echo"Zip Entry Encoding: ".$encoding;} else {echo"Failed to read zip entry.";}} else {echo"Failed to open zip file.";}上述代码将检测ZIP条目的编码格式,并将其设置为解压缩函数的编码参数。

PHP环境下utf8乱码的解决方法

PHP环境下utf8乱码的解决方法
<script type="text/javascript" src=/"script/menu.js"></script>
</head>
<body class="leftbgcolor">
<div><imgsrc=/"image/gl.gif" border="0"/>&#44288;&#47532;&#49468;&#53552;</div>
原因在于php文件本身是用系统字符集来编码的,中文的windows XP都是用GB2312,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后,会让php去解释所请求的页面,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时,编译器默认用系统编码读源文 件里的内容。如果源文件不是用系统编码来保存的,可以用命令javac -encoding指定具体的编码),把数据以GB2312的编码格式传递给apache,而apache服务器不会改变从php传来的数据,只是在应答 消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据,而浏览器却以UTF-8编码来解释应答消息。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

php上传文件中文文件名乱码的解决方法

php上传文件中文文件名乱码的解决方法

php上传⽂件中⽂⽂件名乱码的解决⽅法可能会有不少朋友碰到⼀些问题就是上传⽂件时如果是英⽂倒好原⽂名不会有问题,如果是中⽂可能就会出现乱码了,今天我来给⼤家总结⼀下导致乱码php上传⽂件中⽂⽂件名乱码的原因与解决办法吧。

这⼏天在windows下安装了XAMPP,准备初步学习⼀下php的相关内容。

这⼏天接触到了php上传⽂件,但是出现了⼀个郁闷问题,我准备上传⼀个excel⽂件,但是如果⽂件名是中⽂名就会报错。

⼀来⼆去很是郁闷,后来仔细想了想应该是⽂件编码的问题,我写的php⽂件使⽤的是UTF-8编码,如果没有猜错APACHE处理⽤的应该是GBK(当然现在我⽆法确定,希望⾼⼿给与指教)。

想明⽩了这个问题,就去查找相关的教程了,索性找到了iconv这个函数。

函数原型:string iconv ( string in_charset, string out_charset, string str )使⽤例⼦:$content = iconv("GBK", "UTF-8", $content);这个例⼦的作⽤就是将$content从GBK转换成UTF-8编码。

乱码问题关键代码:复制代码代码如下:$name=iconv("UTF-8","gb2312", $name);move_uploaded_file($tmpname, $this->final_file_path);$name=iconv("gb2312","UTF-8", $name);除了这样来解决上传⽂件中⽂乱码问题,我们还可以把上传⽂件重新命名即可。

例复制代码代码如下:$sFileName = "sda.php";$sOriginalFileName = $sFileName;$sExtension = s str($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名$sExtension = strtolower($sExtension);$sFileName = date("YmdHis").rand(100, 200).".".$sExtension; //这样就是我们的新⽂件名了,全数字的不会有乱码了哦。

乱码修复方法

乱码修复方法

乱码修复方法乱码修复方法什么是乱码乱码是指显示的文字或图像因编码问题出现乱序、乱码或无法辨识的情况。

乱码常见于字符集不匹配或编码转换错误的情况下。

方法一:选择正确的字符集1.确认文档的原始字符集。

2.在使用文档时,设置正确的字符集。

3.如果乱码出现在网页中,可以通过HTML meta标签或HTTP头设置正确的字符集。

方法二:使用正确的文本编辑器1.避免使用不支持多种字符集的编辑器。

2.确保编辑器的默认字符集与文档的字符集一致。

3.在保存文档时,选择正确的字符集。

方法三:使用编码转换工具1.使用专业的编码转换工具,如iconv、cconv等。

2.将文档转换为正确的字符集,并保存。

方法四:检查编码设置1.检查操作系统的默认编码设置,确保与文档的字符集一致。

2.检查文档相关应用程序的编码设置,如浏览器、文本编辑器等。

方法五:使用在线工具修复乱码1.在线工具如Code Beautify、Online Encoding Conversion等可以帮助修复乱码。

2.上传文档并选择正确的字符集,工具会自动转换并修复乱码。

方法六:手动修复乱码1.备份乱码的文档,确保安全。

2.逐个字符或词组进行对照,尝试找到乱码的原始字符并替换之。

方法七:寻求专业帮助1.如果乱码问题比较复杂,可以寻求专业人士的帮助。

2.专业人士可以通过分析乱码原因,提供更有效的解决方法。

以上是一些常见的乱码修复方法,根据具体情况可以选择合适的方法进行修复。

希望本文对解决乱码问题有所帮助。

请注意:本文所述方法仅适用于一般乱码情况,对于特殊情况可能需要更加复杂的处理方式。

在进行修复前请确保已备份原始文档,以免造成不可逆的损失。

方法一:选择正确的字符集1.确认文档的原始字符集。

可以通过查看文档属性、编辑器设置或者与文档创建者确认来获取字符集的信息。

2.在使用文档时,设置正确的字符集。

可以在文档编辑器或操作系统设置中选择与文档字符集一致的选项。

3.如果乱码出现在网页中,可以通过HTML meta标签或HTTP头设置正确的字符集。

网页中文乱码完美解决方案

网页中文乱码完美解决方案

网页中文乱码<meta http-equiv="Content-Type" content="text/html; charset=gb2312">既然后面charset设置为gb2312,那么你打开这个网页,然后另存,保存的时候记得把编码改成gb2312,不然的话charset就会误导浏览器,这样就会乱码了。

2.php编网页出现乱码,我把编码改成utf-8 前台显示正常了,但是有东西输入到数据库再提取出来还是不正常3.apache+php+mysql 为何会出现乱码我们在做PHP项目的时候,经常会遇到中文乱码的问题,有时候编码问题还导致MYSQL的报错。

中文乱码总共有三个原因1:APACHE服务器设置导致乱码2:PHP,或者HTML页面编码导致中文乱码3:MYSQL数据库的表以及字段编码导致中文乱码我们分别从这三个部分来探究PHP程序设计中的编码问题在这之前我们要了解一些基本理论:1、文件编码每个文件在保存的时候都可以选择以什么编码保存,例如用WINDOWS的记事本创建一个文件可以选择ANSI 以及UTF8等等编码。

我们选择了什么编码该文件就以这种编码方式保存在硬盘上。

读取该文件数据的时候也会指定一种编码来打开,如果指定的编码与文件保存的时候的编码不一样的话就会出现乱码2、HTML的编码在网页头部一般有这样一个区域这个的意思是让客户端知道,接下来输出的是html代码(text/html),并且以下输出的内容都将是utf-8编码的。

如果我们用记事本创建一个HTML文件该文件包含但是在保存的时候却以ANSI编码格式保存,那么我们用浏览器打开这个文件时,浏览器看见META 行的UTF8编码设置后就将文件以UTF8格式输出,而文件本来是ANSI编码,这样便出现了中文乱码。

一:APACHE服务器编码在APACHE配置文件中有一行是编码的设置默认的是AddDefaultCharset ISO-8859-1,大部分人认为应该将这句改为AddDefaultCharset UTF-8 。

完美解决phpexcel导出到xls文件出现乱码的问题

完美解决phpexcel导出到xls⽂件出现乱码的问题解决⽅法如下所⽰:<?phpinclude 'global.php';$ids = $_GET['ids'];$sql = "select * from crm_cost_end where id in ( {$ids} )";$result = $db->findAll($sql);//echo $result[1]['sn'];//创建⼀个excel对象$objPHPExcel = new PHPExcel();// Set properties$objPHPExcel->getProperties()->setCreator("ctos")->setLastModifiedBy("ctos")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");//set width$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(50);$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);//设置⾏⾼度$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);//set font size bold$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getFont()->setBold(true);$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //设置⽔平居中$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//$objPHPExcel->getActiveSheet()->mergeCells('A1:J1');// set table header content$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '订单数据汇总时间:' . date('Y-m-d H:i:s'))->setCellValue('A2', '订单ID')->setCellValue('B2', '下单⼈')->setCellValue('C2', '客户名称')->setCellValue('D2', '下单时间')->setCellValue('E2', '需求机型')->setCellValue('F2', '需求数量')->setCellValue('G2', '需求交期')->setCellValue('H2', '确认BOM料号')->setCellValue('I2', 'PMC确认交期')->setCellValue('J2', 'PMC交货备注');// Miscellaneous glyphs, UTF-8for ($i = 0; $i < count($result) - 1; $i++) {$objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($i + 3), $result[$i]['id']);$objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($i + 3), $result[$i]['realname']);$objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($i + 3), $result[$i]['customer_name']);$objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 3), $OrdersData[$i]['create_time']);$objPHPExcel->getActiveSheet(0)->setCellValue('E' . ($i + 3), $result[$i]['require_product']);$objPHPExcel->getActiveSheet(0)->setCellValue('F' . ($i + 3), $result[$i]['require_count']);$objPHPExcel->getActiveSheet(0)->setCellValue('G' . ($i + 3), $result[$i]['require_time']);$objPHPExcel->getActiveSheet(0)->setCellValue('H' . ($i + 3), $result[$i]['product_bom_encoding']);$objPHPExcel->getActiveSheet(0)->setCellValue('I' . ($i + 3), $result[$i]['delivery_time']);$objPHPExcel->getActiveSheet(0)->setCellValue('J' . ($i + 3), $result[$i]['delivery_memo']);$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':J' . ($i + 3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':J' . ($i + 3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getRowDimension($i + 3)->setRowHeight(16);}// Rename sheet$objPHPExcel->getActiveSheet()->setTitle('订单汇总表');// Set active sheet index to the first sheet, so Excel opens this as the first sheet$objPHPExcel->setActiveSheetIndex(0);// Redirect output to a client's web browser (Excel5)<span style="color:#ff0000;">ob_end_clean();//清除缓冲区,避免乱码</span>header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="订单汇总表(' . date('Ymd-His') . ').xls"');header('Cache-Control: max-age=0');$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');$objWriter->save('php://output');>在header() 前⾯加上ob_end_clean() 函数,清除缓冲区, 这样就不会乱码了!以上就是⼩编为⼤家带来的完美解决phpexcel导出到xls⽂件出现乱码的问题全部内容了,希望⼤家多多⽀持~。

PHPword 中文乱码,终极解决方案版+

PHPword中文乱码,终极解决方案版+在数字化办公的浪潮中,文档处理成了我们日常生活中不可或缺的一部分。

尤其是PHPword库,它让PHP开发者能够轻松Word文档。

但在实际应用中,中文乱码问题一直困扰着无数开发者。

今天,就让我这位有着十年方案写作经验的大师,来为大家揭晓终极解决方案!一、问题分析1.编码不一致编码不一致是导致中文乱码的主要原因。

PHPword默认使用的是UTF-8编码,但如果你的源文件、数据库或者其他环节使用了其他编码,比如GBK,那么中文乱码就出现了。

2.PHPword库版本问题不同版本的PHPword库,对中文的支持程度不同。

有些老版本的PHPword库可能存在中文乱码问题,而新版本则修复了这些问题。

3.字体问题Word文档中的字体如果不支持中文,也会导致中文乱码。

二、解决方案1.保持编码一致确保你的PHP代码、源文件、数据库等所有环节都使用UTF-8编码。

这样,从源头上避免编码不一致导致的中文乱码问题。

2.更新PHPword库检查你使用的PHPword库版本,如果发现是老版本,尽快升级到最新版本。

新版本的PHPword库对中文支持更好,可以解决中文乱码问题。

3.设置字体在Word文档时,设置一个支持中文的字体。

例如,你可以使用微软雅黑、宋体等字体。

具体操作如下:php$section->setFontFamily('微软雅黑');4.修改PHPword源码phppublicfunction__construct($text,$font=null,$bold=false,$ italic=false,$underline=null,$encoding='UTF-8') {//$this->encoding=$encoding;}phppublicfunctionsetText($text){//if($this->encoding=='UTF-8'){$text=mb_convert_encoding($text,'UTF-8','UTF-8');}//}这样,PHPword在处理文本时,会根据指定的编码进行转换,从而解决中文乱码问题。

PHPbase64编码后解码乱码的解决办法

PHPbase64编码后解码乱码的解决办法在⽤PHP做东西的时候发现了⼀个问题,可以简单的归结为乱码的问题,但是这个问题不是函数本⾝造成的。

来看看罪魁祸⾸是谁。

嫌疑⼈:base64_encode 和 base64_decode罪⾏:我写了⼀个跳转和提⽰函数,接收提⽰信息后跳转到指定的页⾯,但是跳转提⽰时汉字乱码。

跳转模版代码如下:复制代码代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="author" content="王健 wj@" /><title>跳转提⽰</title><style type="text/css">*{ padding: 0; margin: 0; }body{ background: #fff; font-family: '微软雅⿊'; color: #333; font-size: 16px; text-align:center; }.system-message{ width:600px; margin:150px auto 0 auto; background:#f8f8f8; border:1px solid #ccc;-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;-webkit-box-shadow: #666 0px 0px 10px;-moz-box-shadow: #666 0px 0px 10px;box-shadow: #666 0px 0px 10px;}.system-message h1{ font-size:30px; font-weight:normal; height:100px; line-height:100px; color:#c60;}.system-message .jump{ padding: 40px 0;}.system-message .jump a{ color: #333;}.system-message .success,.system-message .error{ height:60px; line-height:70px; font-size: 18px; color:#900;}.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}</style></head><body><div class="system-message"><?php if( $_GET['success'] ){?><h1>:) &nbsp; 恭喜!</h1><p class="success"><?php echo base64_decode($_GET['message']); ?></p><?php }else{?><h1>:( &nbsp; 出错了!</h1><p class="error"><?php echo base64_decode($_GET['message']); ?></p><?php }?><p class="detail"></p><p class="jump">系统将在 <b id="wait"><?php echo $_GET['time']; ?></b> 后跳转,可直接 <a id="href" href="<?php echo base64_decode($_GET['url']); ?>">点此跳转</a></p></div><script type="text/javascript">(function(){var wait = document.getElementById('wait'),href = document.getElementById('href').href;var interval = setInterval(function(){var time = --wait.innerHTML;if(time <= 0) {location.href = href;clearInterval(interval);};}, 1000);})();</script></body></html>PHP redirect函数定义如下:复制代码代码如下:/* 提醒后跳转 */function _alert( $success=true, $message='success', $time='3', $url='/'){header('Location:/include/redirect.php?success='.$success.'&message='.base64_encode($message).'&time='.$time.'&url='.base64_encode($url));exit;}假如在PHP中这样调⽤函数的话:复制代码代码如下:$query = "update content set bid='$clean[bid]',title='$clean[title]',content='$clean[content]',path='$clean[path]' where id=".$clean['id'];if( mysql_query($query) ){_alert(1,'修改成功',3,'/admin/manage.php');}else{_alert(false,'修改失败'.mysql_error(),5,'/admin/manage.php');}你就会看到,“修改成功”或者是“修改失败”这⼏个汉字乱码了。

网页中文乱码完美解决方案

网页中文乱‎码<meta http-equiv‎="Conte‎n t-Type" conte‎n t="text/html; chars‎e t=gb231‎2">既然后面c‎h arse‎t设置为g‎b2312‎,那么你打开‎这个网页,然后另存,保存的时候‎记得把编码‎改成gb2‎312,不然的话c‎h arse‎t就会误导‎浏览器,这样就会乱‎码了。

2.php编网‎页出现乱码‎,我把编码改‎成u tf-8 前台显示正‎常了,但是有东西‎输入到数据‎库再提取出‎来还是不正‎常3.apach‎e+php+mysql‎为何会出现‎乱码我们在做P‎H P项目的‎时候,经常会遇到‎中文乱码的‎问题,有时候编码‎问题还导致‎M YSQL‎的报错。

中文乱码总‎共有三个原‎因1:APACH‎E服务器设‎置导致乱码‎2:PHP,或者HTM‎L页面编码‎导致中文乱‎码3:MYSQL‎数据库的表‎以及字段编‎码导致中文‎乱码我们分别从‎这三个部分‎来探究PH‎P程序设计‎中的编码问‎题在这之前我‎们要了解一‎些基本理论‎:1、文件编码每个文件在‎保存的时候‎都可以选择‎以什么编码‎保存,例如用WI‎N DOWS‎的记事本创‎建一个文件‎可以选择A‎N SI 以及UTF‎8等等编码‎。

我们选择了‎什么编码该‎文件就以这‎种编码方式‎保存在硬盘‎上。

读取该文件‎数据的时候‎也会指定一‎种编码来打‎开,如果指定的‎编码与文件‎保存的时候‎的编码不一‎样的话就会‎出现乱码2、HTML的‎编码在网页头部‎一般有这样‎一个区域这个的意思‎是让客户端‎知道,接下来输出‎的是htm‎l代码(text/html),并且以下输‎出的内容都‎将是utf‎-8编码的。

如果我们用‎记事本创建‎一个HTM‎L文件该文件包含‎但是在保存‎的时候却以‎A N SI编‎码格式保存‎,那么我们用‎浏览器打开‎这个文件时‎,浏览器看见‎M E T A 行的UTF‎8编码设置‎后就将文件以‎U TF8格‎式输出,而文件本来‎是A NSI‎编码,这样便出现‎了中文乱码‎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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或f,mysql最好用utf8编码[mysql]default-character-set=utf8[mysqld]default-character-set=utf8default-storage-engine=MyISAM在[mysqld]下加入:default-collation=utf8_bininit_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是保存在服务上文件的地址。

四.再来总结一下为什么会乱码一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。

要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。

记事本和Dreamweaver在打开页面时候会自动识别文件编码因而不太会出问题。

而ZendStudio却不会自动识别编码,它只会根据首选项的配置固定以某种编码打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存,乱码就出现了(我深有体会)。

2、页面申明编码:在HTML代码HEAD里面,可以用<meta http-equiv="Content-Type" content="text/html;charset="XXX"/>来告诉浏览器网页采用了什么编码,目前中文网站开发中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为连接编码.一定可以解决乱码的问题.4、Win下apache用get方法传递中文参数会出错:test.php?a=你好&b=你也好传递参数是会导致一个内部错误解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)。

相关文档
最新文档