php文件上传与下载字符编码问题
2016-12-06 11:49
162 查看
一直想吧php文件上传下载字符编码问题总结一下,但是一拖再拖久而久之不晓得拖了多久,今天终于下定决心开始动手。
首先,php文件一般用的utf-8编码,而windows下的字符编码一般都为gbk,所以在php在读取本地的中文文件时就会出现乱码问题。如下图所示
解决办法:
在文件输出的时候使用iconv函数进行转码代码如下:
<?php
$dir_str_path = 'D:/tnwamp/Apache24/htdocs/1205/pic/';
if (is_dir($dir_str_path)) {
if ($dir_handle = opendir($dir_str_path)) {
while ($filename = readdir($dir_handle)) {
if (is_dir($dir_str_path.$filename)) {
echo '<br>===目录'.iconv('gb2312','utf-8',$filename);
}else{
echo "<br>===文件".iconv('gb2312','utf-8',$filename);
}
}
//echo '添加水印成功';
}else{
echo '文件打开失败';
}
} else {
echo '文件路径有误';
}
因为我们的$filename是从句柄中得到的,字符编码为gbk,在浏览器输出后就会得到乱码,所以输出前更改一下编码就好了。
但是有一点需要注意的是,如果使用is_dir或者is_file函数查询时候,如果查询地址是在php页面手动输入的时候,就需要把含有中文的文件名进行转码,然后再查询
要不然查不到包含中文字符的文件哟。
首先,php文件一般用的utf-8编码,而windows下的字符编码一般都为gbk,所以在php在读取本地的中文文件时就会出现乱码问题。如下图所示
解决办法:
在文件输出的时候使用iconv函数进行转码代码如下:
<?php
$dir_str_path = 'D:/tnwamp/Apache24/htdocs/1205/pic/';
if (is_dir($dir_str_path)) {
if ($dir_handle = opendir($dir_str_path)) {
while ($filename = readdir($dir_handle)) {
if (is_dir($dir_str_path.$filename)) {
echo '<br>===目录'.iconv('gb2312','utf-8',$filename);
}else{
echo "<br>===文件".iconv('gb2312','utf-8',$filename);
}
}
//echo '添加水印成功';
}else{
echo '文件打开失败';
}
} else {
echo '文件路径有误';
}
因为我们的$filename是从句柄中得到的,字符编码为gbk,在浏览器输出后就会得到乱码,所以输出前更改一下编码就好了。
但是有一点需要注意的是,如果使用is_dir或者is_file函数查询时候,如果查询地址是在php页面手动输入的时候,就需要把含有中文的文件名进行转码,然后再查询
要不然查不到包含中文字符的文件哟。
相关文章推荐
- PHP+FLASH实现上传文件进度条相关文件 下载
- 解决在Windows 2003中无法上传超过200K文件以及无法下载超过4M的文件问题
- commons-FileUpload文件上传下载,及中文乱码、IE7路径错误问题解决
- struts2文件上传下载及乱码问题解决
- apache 和php搭建的平台,上传文件的限制问题
- CFtpConnection上传、下载、删除文件的问题
- php中文件上传的安全问题
- php上传文件大小限制问题的解决
- pdf文件上传成功后,下载出错的问题原因
- Flash两个上传示例ASP和PHP(原文件下载,包括后台程序)
- 真正解决jspSmartUpload组件上传下载文件时中文乱码问题!!!
- jaVA使用FTP上传下载文件的问题
- IIS6 解决下载/上传大文件的问题
- jaVA使用FTP上传下载文件的问题
- php中文件上传的安全问题
- php 大文件上传问题
- PHP上传问题总结(文件大小检测,大文件上传)
- php环境架设后不能上传文件的问题
- 解决在Windows2003Server和IIS 6.0中对于上传下载文件大小限制的问题
- php文件的上传和下载