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文件出现乱码的问题

完美解决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中文乱码,终极解决方案版+在数字化办公的浪潮中,文档处理成了我们日常生活中不可或缺的一部分。

尤其是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编码后解码乱码的解决办法

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‎编码,这样便出现‎了中文乱码‎。

php中文乱码的解决方法

php中文乱码的解决方法

php中文乱码的解决方法关于php中文乱码的解决方法php即可以在web页面上执行,又可以通过PHP CLI(命令行界面)在命令行执行PHP脚本。

一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,下面是店铺整理的关于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(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的`上传、下载。

PHP中json-encode格式中文问题解决办法

PHP中json-encode格式中文问题解决办法

PHP中json-encode格式中文问题解决办法PHP中json-encode格式中文问题解决办法生活、工作、学习倘使都能自动,则教育之收效定能事半功倍。

所以我们特别注意自动力之培养,使它关注于全部的生活工作学习之中。

自动是自觉的行动,而不是自发的行动。

自觉的行动,需要适当的培养而后可以实现。

以下是店铺为大家搜索整理的PHP中json_encode格式中文问题解决办法,希望对大家有所帮助!1. 原因分析:在存储到数据库时!MySQL 不会存储 unicode 字符:MySQL 仅支持从基本的.多语种平面字符(0×0000-0xFFFF)。

请尝试存储一个同义词相反:)更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用UTF8MB4 编码。

json_encode中文的时候,会把每个中文字符encode成“uxxxx”而存进数据库的时候,“”被屏蔽了,直接变成”uxxxx”2. 解决问题:知道是什么原因就好解决问题了,你可以选择其他存储方式;或者再对症下药进一步转义””为“”,以保留””我们的解决方案:1. 避免json_encode将中文转换unicode编码.PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。

加上这个选项后,就不会自动把中文编码了。

$test = json_encode("深圳", JSON_UNESCAPED_UNICODE);2. 先将中文字段urlencode,json_encode后,再用urldecode,也可以保证中文不会被转成unicode。

$test =urldecode(json_encode(array('brief'=>urlencode('简介'),'title'=>urlencode(标题)));3. 进一步转义””为“” 避免unicode中文前’'被mysql当成特殊字符去除【PHP中json-encode格式中文问题解决办法】。

request请求参数中文乱码处理

request请求参数中文乱码处理

request请求参数中文乱码处理在网络开发中,我们经常会遇到request请求参数中出现中文乱码的问题。

这个问题的出现主要是因为在传输过程中,参数的编码格式没有正确处理,导致中文字符无法正确显示或解析。

解决这个问题的方法有很多种,下面我将介绍一些常用的处理方式。

一、设置请求头的编码格式在发送请求之前,我们可以设置请求头的编码格式为UTF-8,以确保中文字符能够正确传输。

具体的代码如下:```request.setHeader("Content-Type", "text/html; charset=UTF-8");```这样设置之后,服务器在接收到请求时会按照UTF-8的编码格式进行解析,从而避免了中文乱码的问题。

二、对请求参数进行编码转换如果在设置请求头的编码格式之后,仍然出现中文乱码的情况,我们可以尝试对请求参数进行编码转换。

具体的做法是先将参数按照ISO-8859-1编码格式进行解码,然后再按照UTF-8编码格式进行编码。

示例代码如下:```String param = new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8");```这样做的目的是将参数的编码格式统一为UTF-8,从而避免中文乱码的问题。

三、使用URL编码方式传输参数除了对请求参数进行编码转换之外,我们还可以使用URL编码方式传输参数。

URL编码是一种将特殊字符转换为%xx格式的编码方式,可以确保参数在传输过程中不会出现乱码。

示例代码如下:```String param = URLEncoder.encode(request.getParameter("param"), "UTF-8");```这样做的好处是在传输过程中,中文字符会被转换为%xx格式的字符串,从而避免了中文乱码的问题。

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

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

php中url地址栏传参数中文乱码解决方法汇总在PHP中,URL地址栏传递参数时可能会出现中文乱码的问题。

这是因为URL是一种只支持ASCII字符的编码方式,不支持直接传递中文字符。

为了解决这个问题,我们可以使用以下方法:1. 使用 urlencode 和 urldecode 函数:- 在发送请求时,可以使用 `urlencode` 函数对参数进行编码,将中文字符转换为 URL 编码格式(%E4%BD%A0%E5%A5%BD)。

- 在接收请求时,可以使用 `urldecode` 函数对编码后的参数进行解码,将 URL 编码格式还原为中文字符。

2. 使用 rawurlencode 和 rawurldecode 函数:- `rawurlencode` 和 `rawurldecode` 函数与 `urlencode` 和`urldecode` 函数类似,但它们对字符进行更严格的编码和解码,确保特殊字符不会被转义。

3. 使用 base64_encode 和 base64_decode 函数:- 在发送请求时,可以使用 `base64_encode` 函数对参数进行编码,将参数转换为 Base64 编码格式。

- 在接收请求时,可以使用 `base64_decode` 函数对编码后的参数进行解码,将 Base64 编码格式还原为原始参数。

4. 使用 iconv 函数进行字符编码转换:- 在发送请求时,可以使用 `iconv` 函数将参数从当前字符编码(如 UTF-8)转换为其他字符编码(如 GBK)。

- 在接收请求时,可以使用 `iconv` 函数将参数从其他字符编码转换为当前字符编码。

5.在HTML中使用表单提交方式:- 如果参数是通过表单提交的,可以在 HTML 表单上使用 `accept-charset` 属性来指定表单中参数的字符编码(如 UTF-8),确保参数在传递过程中不会出现乱码。

6.使用$_GET和$_POST变量:-如果参数是通过HTTPGET或POST方法传递的,可以直接使用PHP中的`$_GET`或`$_POST`变量来获取参数值,PHP会自动处理编码问题。

中文乱码解析

中文乱码解析

中文乱码解析中文乱码是指在使用中文时,出现了一些不认识的乱码,使得中文无法正常显示或者正常使用。

出现乱码的原因有很多,可能是因为编码格式不一致,也可能是因为使用了不支持中文的软件或者操作系统。

在使用中文的时候,遇到乱码问题比较常见,本文将从以下几个方面分析中文乱码的原因及解决方法。

一、中文乱码的原因中文乱码的原因有多种,下面罗列了其中一些常见的原因:1.编码格式不一致:编码格式是指文本中字符编码的规范,比如UTF-8、GBK、GB2312等。

当使用不同的编码格式时,就会出现乱码的情况。

2.文件格式不一致:如果在使用中文时,把文本从一个软件或者操作系统中复制到另一个软件或者操作系统中,就会出现乱码的情况。

这是因为不同的软件或者操作系统的文件格式不一致导致的。

3.软、硬件不支持中文:如果使用的软件或者操作系统不支持中文,就会导致乱码的情况。

比如使用英文版的Windows操作系统,就可能出现中文乱码。

4.字体缺失:如果使用字体库中没有的字体,则无法正确显示该字体,也会导致乱码的情况。

5.网络传输不稳定:在进行网络传输时,如果网络不稳定,就会导致中文乱码的问题。

二、中文乱码的解决方法针对不同的中文乱码原因,我们可以采取不同的解决方法:1.更改编码格式:如果是由于编码格式不一致导致的乱码问题,可以通过更改编码格式来解决。

比如将文件的编码格式从GBK转换为UTF-8等。

2.调整软、硬件设置:如果是由于软、硬件不支持中文导致的乱码问题,可以通过调整软、硬件设置来解决。

比如将操作系统语言设置为中文,或者使用中文版的Windows操作系统等。

3.添加字体:如果是由于字体缺失导致的乱码问题,可以尝试添加字体来解决。

比如到字体库中下载所需字体并安装。

4.选择合适的软件:如果是某些软件不支持中文导致的乱码问题,可以尝试使用支持中文的软件。

5.网络优化:如果是网络传输导致的中文乱码问题,可以尝试优化网络传输,使其更加稳定。

linux php乱码解决方法

linux php乱码解决方法

linux php乱码解决方法Linux和PHP是常用的开源软件,它们在Web开发中被广泛使用。

然而,有时候在使用Linux服务器上运行PHP程序时会出现乱码的问题。

乱码问题会导致网页显示出错,影响用户的体验。

本文将介绍几种解决Linux和PHP乱码问题的方法。

一、检查字符编码我们需要确保服务器和PHP程序使用的字符编码一致。

常见的字符编码有UTF-8、GBK等。

可以通过在PHP程序中设置字符编码来解决乱码问题。

在程序的开头加入以下代码:```phpheader('Content-Type:text/html;charset=utf-8');```这样可以确保网页以UTF-8编码输出,解决大部分乱码问题。

二、检查文件编码乱码问题有可能是由于文件本身的编码问题导致的。

可以使用文本编辑器打开PHP文件,查看文件编码。

常见的编码有UTF-8、GBK、ISO-8859-1等。

如果文件编码与服务器和PHP程序使用的编码不一致,就会出现乱码。

可以尝试将文件编码修改为与服务器和PHP 程序一致的编码,然后重新保存文件。

三、检查数据库编码如果PHP程序使用了数据库,还需要检查数据库的编码设置。

常见的数据库编码有UTF-8、GBK等。

可以登录数据库管理工具,查看数据库的编码设置。

如果数据库编码与服务器和PHP程序使用的编码不一致,也会导致乱码问题。

可以尝试修改数据库的编码设置,使其与服务器和PHP程序一致。

四、检查PHP扩展有时候乱码问题还可能是由于缺少相应的PHP扩展引起的。

可以通过检查php.ini文件来确认是否加载了需要的扩展。

可以搜索以下几个扩展,看是否被注释掉:```iniextension=mbstring.soextension=iconv.soextension=mysqli.so```如果这些扩展没有被加载,可以去掉前面的分号,并重启服务器。

五、检查环境变量在Linux系统中,还需要检查环境变量是否正确设置。

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

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

1、解决编码问题,PHPword 会对输入的文字进行utf8_encode编码转化,如果你使用GBK、GB2312或者utf8编码的话就会出现乱码,如果你用utf8编码,就查找类库中所有方法中的 utf8_encode 转码将其删除,如果你采用GBK或者GB2312编码,使用iconv进行编码转换。

2、解决中文字体支持,在writer/word2007/base.php中 312行添加 $objWriter->writeAttribute('w:eastAsia',$font)3、启动php zip支持,windows环境下在php配置文件php.ini中,将extension=php_zip.dll前面的分号“;”去除;(如果没有,请添加extension=php_zip.dll此行并确保php_zip.dll文件存在相应的目录),然后同样在php.ini文件中,将 zlib.output_compression = Off 改为zlib.output_compression = On ;计量单位:缇(twips)首先解释一下PHPWord最基本的计量单位:“缇”(twips),我们常常在文件中看到或使用计量单位“缇”,它是开源办公软件中最基本的计量单位,“缇”是"TWentieth of an Inch Point"的简写,意思 1/20磅,与其他常用剂量单位的换算是1缇=1/1,440英寸,1缇=1/567厘米,1缇=1/15像素下面是实际的使用案例:require_once 'word/PHPWord.php';$PHPWord = new PHPWord();// New portrait section$section = $PHPWord->createSection();// Define table style arrays$styleTable = array('borderSize'=> 0, 'borderColor' => 'ffffff','cellMargin' => 80 , 'marginLeft' => 1134,'marginRight' =>1134,'marginTop' => 1134,'marginBottom' => 1134,'align' =>'right','valign' => 'right');$styleFirstRow = array('borderBottomSize' => 18,'borderBottomColor' => '000000', 'bgColor' => '666666','valign' =>'center');// Define cell style arrays$styleCell = array('align' => 'center','borderSize' => 1, 'bgColor' => ffffff, );$styleCellBTLR = array('valign'=>'center','textDirection'=>PHPWord_Style_Cell::TEXT_DIR_BTLR);// Define font style for first row$fontStyle = array('bold'=>true, 'valign' => 'right' , 'align' => 'right' , 'size'=>24);$fontStyles = array('color'=>'000000', 'size'=>18, 'bold'=>true ,'align' => 'right' , 'valign' => 'right');$titleStyles = array('color'=> 000000 ,'size'=>24);$PHPWord->addFontStyle('myOwnStyle', $fontStyles);// Add table style$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);// Add table$table = $section->addTable('myOwnTableStyle');// Add row$result = $this->db->query($sq1);$i=0;$table->addRow(100);$table->addCell(9600)->addText('各科室工作完成情况', array( 'size' => 30 ,'bold'=>true) , array( 'align' => 'center'));$table->addRow(100);$table->addCell(1500, $styleCell )->addText('单位', $fontStyles , array( 'align' => 'center'));$table->addCell(3300, $styleCell)->addText('标题',$fontStyles, array( 'align' => 'center'));$table->addCell(3300, $styleCell)->addText('内容', $fontStyles, array( 'align' => 'center'));$table->addCell(1500, $styleCell)->addText('时间', $fontStyles, array( 'align' => 'center'));foreach($result->result_array() as $ros){$table->addRow();$table->addCell(1500,$styleCell)->addText($ros['author'],array('bold '=>false),array( 'align' => 'center' ));$table->addCell(3300,$styleCell)->addText($ros['title']);$table->addCell(3300,$styleCell)->addText(cutstr_html($ros['neiron g']));$table->addCell(1500,$styleCell)->addText(date('Y-m-d',$ros['time'] ),array('bold'=>false),array( 'cellMarginTop' => 80));$i++;}// $time = time();// $time = date('Y年m月d日',$time);$table->addRow(100);$table->addCell(1500)->addText('', $fontStyles);$table->addCell(3300)->addText('', $fontStyles);$table->addCell(3300)->addText('', $fontStyles);// $time = $time . ".doc";$table->addCell(1500)->addText('共'.$i.'条', array( 'size' => 12 ) , array( 'align' => 'right'));$time = time();$objWriter = PHPWord_IOFactory::createWriter($PHPWord,'Word2007');$objWriter->save("$time.docx");。

PHP乱码问题,UTF-8乱码常见问题小结

PHP乱码问题,UTF-8乱码常见问题小结

PHP乱码问题,UTF-8乱码常见问题⼩结1.在head后,title前加⼊⼀⾏:<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />顺序不能错,⼀定要在显⽰的标题有可能是乱码!2.html⽂件编码问题:点击编辑器的菜单:“⽂件”->“另存为”,可以看到当前⽂件的编码,确保⽂件编码为:UTF-8,如果是ANSI,需要将编码改成:UTF-8。

3.HTML⽂件头BOM问题:将⽂件从其他的编码转换成UTF-8编码时,有时候会在⽂件的最开始加上⼀个BOM标签,在个BOM标签可能会导致浏览器在显⽰中⽂的时候出现乱码。

删除这个BOM标签的⽅法:1.可以⽤Dreamweaver打开⽂件,并重新保存,即可以去除BOM标签!2.可以⽤EditPlus打开⽂件,并在菜单“⾸选项”->“⽂件”->"UTF-8标识",设置为:“总是删除签名”,然后保存⽂件,即可以去除BOM标签!4.WEB服务器UTF-8编码问题:如果你按以上所列的步骤做了,还是有中⽂乱码问题,请检查你的所使⽤的WEB服务器的编码问题如果你使⽤的是Apache,请将配置⽂件⾥的:charset 设成:utf-8(这⾥仅列出⽅法,具体格式请参考apache的配置⽂件) 如果你使⽤的是Nginx,请将nginx.conf⾥的:charset 设成 utf-8,具体找到 "charset gb2312;"或者类似的语句,改成:“charset utf-8;”。

1.在代码开始出加⼊⼀⾏:header("Content-Type: text/html;charset=utf-8");2.PHP⽂件编码问题点击编辑器的菜单:“⽂件”->“另存为”,可以看到当前⽂件的编码,确保⽂件编码为:UTF-8,如果是ANSI,需要将编码改成:UTF-8。

PHPWord中文乱码、单元格合并、动态表格模板解决方案合集

PHPWord中文乱码、单元格合并、动态表格模板解决方案合集

PHPWord中⽂乱码、单元格合并、动态表格模板解决⽅案合集摘要:最近⼀个项⽬开发要⽤到PHP技术导出Word⽂档,采⽤PHPWord插件,版本为0.6.2 beta,已停⽌维护。

⽹上还有另外⼀个版本的PhpWord,项⽬类名⼤⼩写上略有不同,⾪属于PHPOffice/PHPWord,。

这个版本的PHPWord为CodePlex停⽌维护后添加,⽬前更新⾄0.15,个⼈觉得0.12作者更新的Release较为实⽤,此项⽬内容更加丰富,⽀持的功能也⽐较多(包括⾏间距,缩进和⾸⾏缩进等)。

但是有些API,在PHPOffice/PHPWord⾥是不推荐的,⽐如createSection需要改成addSection,另外应⽤这个版本的PHPWord不需要像PHPWord 0.6.2那样做任何中⽂⽀持的修改。

本⽂重点就PHPWord 0.6.2 作⼀介绍。

1、增加东亚字体⽀持打开/Writer/Word2007/Base.php⽂件,⼤概在第349⾏,函数_writeTextStyle内添加:$objWriter->writeAttribute('w:eastAsia', $font)修改后的内容如下:if($font != 'Arial') {$objWriter->startElement('w:rFonts');$objWriter->writeAttribute('w:eastAsia', $font); // 添加这⾏$objWriter->writeAttribute('w:ascii', $font);$objWriter->writeAttribute('w:hAnsi', $font);$objWriter->writeAttribute('w:cs', $font);$objWriter->endElement();}2、默认模板中⽂乱码(此模板后⾯会修改,不推荐此⽅法)打开/PHPWord/Template.php,找到代码$replace = utf8_encode($replace);修正为$replace = iconv( 'gbk','utf-8', $replace);代码如下:/*** Set a Template value** @param mixed $search* @param mixed $replace*/public function setValue($search, $replace) {if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {$search = '${'.$search.'}';}if(!is_array($replace)) {//$replace = utf8_encode($replace);$replace =iconv('gbk', 'utf-8', $replace); // 注释掉上⾯⾏后添加这⾏}$this->_documentXML = str_replace($search, $replace, $this->_documentXML);}中⽂调⽤⽅式也要修改:$document->setValue('Template', iconv('utf-8', 'GB2312//IGNORE', '中⽂'));3、中⽂乱码问题打开/PHPWord/Section.php,找到代码$givenText = utf8_encode($text);修改为$givenText = iconv('gbk', 'utf-8', $text);代码如下:/*** Add a Text Element** @param string $text* @param mixed $styleFont* @param mixed $styleParagraph* @return PHPWord_Section_Text*/public function addText($text, $styleFont = null, $styleParagraph = null) {//$givenText = utf8_encode($text);$givenText = iconv('gbk', 'utf-8', $text); // 注释掉上⾯⾏后添加这⾏$text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph);$this->_elementCollection[] = $text;return $text;}替换Section.php⽂件所有utf8_encode($参数)函数为iconv('gbk','utf-8',$参数)同理修改/PHPWord/Section⽬录下Header.php、Footer.php、TextRun.php、Table/Cell.php其中TextRun.php是防⽌⽂本资源(段落连续)中⽂错误,Cell.php是防⽌表格中⽂错误。

相关主题
  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(你也好)。

相关文档
最新文档