Загрузка файлов с корейским именем файла не сохраняется должным образом в базе данных MySQL - PullRequest
1 голос
/ 12 ноября 2011

Похоже, что мой скрипт загрузки не хранит корейские символы в базе данных должным образом.

$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 Ответ

3 голосов
/ 12 ноября 2011

Вам необходимо убедиться:

  1. база данных / таблица / столбец использует UTF-8
  2. база данных соединение использует UTF-8
  3. веб-браузер использует UTF-8 при загрузке файла
  4. веб-браузер использует UTF-8 при отображении файла пользователю позже
  5. , что всеваши инструменты разработки (например, phpMyAdmin) используют UTF-8, когда вы просматриваете базу данных

Если есть какая-то точка в любом месте пути, где что-то не использует UTF-8, тогда дела идутидти ужасно неправильно.

Обратите внимание, что веб-браузеры обычно не используют UTF-8 по умолчанию.Поэтому вам нужно будет либо добавить тег <meta>, инструктирующий его использовать utf-8, либо вручную настроить их для его использования (в моем браузере, с помощью View -> Text Encoding -> UTF-8).* Ваш php-скрипт отображает имя файла в браузере, но если он просто отображает имя файла без тега <meta>, браузер будет пытаться отобразить его как некоторую другую кодировку, возможно, latin1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...