zoukankan      html  css  js  c++  java
  • UTF-8 的中文檔案名上傳問題

    在上传文件后,一般都会用 move_uploaded_file() 进行文件移动改名。但是 move_uploaded_file() 并不支持 UTF-8 编码,如果含有,那么函数就会执行失败,但是这个函数是支持 GB2312 或者是 GBK 编码的,因此可以利用 iconv() 函数先进行名字转换来来解决问题。有两种情况:

    1. 服务器是中文 Windows 环境
    在服务器是中文 Windows 环境下,由于中文 Windows 系统的编码是 GB2312,那么可以如下使用代码:

    [Plain Text] 纯文本查看 复制代码
    1
    2
    $upload_file = iconv("UTF-8", "GB2312", $_FILES["myfile"]["name"]);
    move_uploaded_file($_FILES["myfile"]["tmp_name"], $upload_file)


    上面代码的意思是,先用 iconv() 函数对上传文件名转换为 GB2312 码(上传的文件名若含有中文,那么使用 UTF-8 编码),然后再进行 move_uploaded_file() 改名。这样在中文系统下就可以正常显示了。但是 Linux 系统本身就是使用 UTF-8 来编码的,因此想要在 Linux 下正常显示中文,那么就再次 iconv() 转换一下,这是下面所说的第 2 种情况。

    2. 服务器是 Linux 系统
    如上面所讲,利用 move_uploaded_file() 函数支持 GBK 的特性,那么我们可以利用再次转换的小技巧使上传的文件名中含有中文的文件在 Linux 下也能正常显示中文名称,如下面代码所示:

    [PHP] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    <?php
            $upload_file = iconv("UTF-8", "GBK", $_FILES["myfile"]["name"]);   //先转换名字为 GBK 编码
            if (move_uploaded_file($_FILES["myfile"]["tmp_name"], $upload_file)) {
                    $res_file = iconv("GBK", "UTF-8", $upload_file);    // 再从 GBK 转为 UTF-8
                    rename($upload_file, $res_file);   // 重命名一下文件
                    echo "<strong>upload ok</strong><hr>";
            } else {
                    echo "upload failed";
            }
     
    ?>


    运行输出:
    <1> 上传一个文件名中含有中文的文件:

    <2> 检查在 Linux 下是否正常显示:

    utf-8 編碼網頁無法在 big5 系統正確處理中文檔名,原因在於 move_uploaded_file() 不能處理 utf-8 中文編碼,需利用 iconv() 函數作轉碼,解決方法如下:

    請將
    move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile)改為
    move_uploaded_file($_FILES['myfile']['tmp_name'], iconv("utf-8", "big5", $uploadfile))

  • 相关阅读:
    WebSocket
    Jedis工具类
    电脑突然没有声音了 右下角红叉叉,由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码19)
    java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
    WCF中的数据契约(Continued)
    WCF中的服务契约
    搭建基于MOSS的团队解决方案01——Microsoft Office SharePoint 2007 Server快速入门(Continued)
    Silverlight 的发展之路
    Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)
    使用.NET平台工具操作Live Framework
  • 原文地址:https://www.cnblogs.com/jthb/p/3489456.html
Copyright © 2011-2022 走看看