一直想吧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页面手动输入的时候,就需要把含有中文的文件名进行转码,然后再查询
要不然查不到包含中文字符的文件哟。