原始代码:
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) {}
解决PHP上传文件中文名乱码
本文介绍了一个常见的PHP上传文件时遇到的问题,即上传的文件名在GBK编码环境下显示为乱码。通过使用iconv函数将文件名从UTF-8转换为gb2312,成功解决了中文文件名的乱码问题。
196

被折叠的 条评论
为什么被折叠?



