使用韩文文件名上传文件无法正确存储到mysql数据库中

时间:2011-11-12 09:21:19

标签: php mysql upload cjk

我的上传脚本似乎没有正确地将韩文字符存储到数据库中。

$file_name = $_FILES['Filedata'][ 'name' ];
$newFileName = time() . "-" . $file_name;
$target = $uploaddir . $newFileName;
$source_file_path = $_FILES['Filedata']['tmp_name'];
if( move_uploaded_file( $source_file_path, $target ) ) {
    $sql = "INSERT INTO images(file, album, author) VALUES('".$newFileName."', '".$albumID."', '".$authorID."')";
    $result = mysql_query($sql);
    if(!$result) {
        echo "Could not store into database";
    } else {
        $sql = "UPDATE albums SET `lastdate` = NOW() WHERE id = '".$albumID."'";
        if(mysql_query($sql)) {
            echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$target);
        } else {
            echo mysql_error();
        }
    }
}

奇怪的是,它使用正确的名称正确存储文件,但它将所有不常见的字符添加到数据库中,如“1321088842-ê°”,“。.jpg”。数据库设置为utf8_general_ci,所以我不确定问题是什么。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您需要确保:

  1. 数据库/表/列使用的是UTF-8
  2. 数据库连接正在使用UTF-8
  3. 上传文件时,网络浏览器使用的是UTF-8
  4. 当您稍后在
  5. 上向用户显示文件时,Web浏览器正在使用UTF-8
  6. 您查看数据库时所有开发工具(例如:phpMyAdmin)都使用UTF-8
  7. 如果在任何地方都有任何意义,在某些地方没有使用UTF-8那么事情将会发生可怕的错误。

    请注意,默认情况下,Web浏览器通常不使用UTF-8。因此,您需要包含一个<meta>标记,指示它使用utf-8,或者手动设置它们以使用它(在我的浏览器中,使用View - &gt;文本编码 - &gt; UTF-8)。 / p>

    你的php脚本正在回显浏览器的文件名,但如果只是回显没有<meta>标签的文件名,浏览器会尝试将其显示为其他编码,可能是latin1。