原始代码:
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) {}