PHP上传包含中文文件名的文件后,文件名乱码的解决办法

原始代码:

if(!move_uploaded_file($book_image['tmp_name'], $book_image['name'])){
    $err_msg = "Error moving the file to its destination, " .
        "please try again <a href='{$upload_page}'>here</a>.";
}

可能是move_uploaded_file这个函数不考虑文件编码,硬编码为GBK处理的,导致出错.

代码改进:要用到iconv这个函数

if(!move_uploaded_file($book_image['tmp_name'], iconv("UTF-8","gb2312",$book_image['name']))){
    $err_msg = "Error moving the file to its destination, " .
        "please try again <a href='{$upload_page}'>here</a>.";
}

这样就能保存到正确的中文文件名了.

/**
 * Convert string to requested character encoding
 * @link http://php.net/manual/en/function.iconv.php
 * @param string $in_charset <p>
 * The input charset.
 * </p>
 * @param string $out_charset <p>
 * The output charset.
 * </p>
 * <p>
 * If you append the string //TRANSLIT to
 * <i>out_charset</i> transliteration is activated. This
 * means that when a character can't be represented in the target charset,
 * it can be approximated through one or several similarly looking
 * characters. If you append the string //IGNORE,
 * characters that cannot be represented in the target charset are silently
 * discarded. Otherwise, <i>str</i> is cut from the first
 * illegal character and an <b>E_NOTICE</b> is generated.
 * </p>
 * @param string $str <p>
 * The string to be converted.
 * </p>
 * @return string the converted string or <b>FALSE</b> on failure.
 * @since 4.0.5
 * @since 5.0
 */
function iconv ($in_charset, $out_charset, $str) {}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值