上传带有西里尔字母名称的文件时出现奇怪的符号


Strange symbols when uploading a file with cyrillic names

我正在使用Laravel和Dropzone.js。一切都很好,直到我上传带有西里尔字母名称的文件。目录中的文件名称如下所示 - Приети РїРѕ специалности_окончателно-РЅРѕРІ_0 我猜这是编码的东西。在php.ini我设定了default_charset="UTF-8" internal_encoding = UTF-8 input_encoding = UTF-8但问题仍未解决。会是什么?

看起来你需要 http://php.net/manual/en/book.iconv.php如果你有它,你可以尝试:

$fileName = iconv("cp1251", "utf-8", $_FILES["upload"]["name"]);
// or
//  $fileName = iconv("ISO-8859-1", "utf-8", $_FILES["upload"]["name"]);

$baseDir = '/some/dir/';
move_uploaded_file(
    $_FILES["upload"]["tmp_name"],
    $baseDir.$fileName
);

我可以确认以下内容是否正常工作:

header("内容类型:文本/html;字符集=UTF-8");

if ( 0 < $_FILES['file']['error'] ) {
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    echo 'Error';
}
else {
    $baseDir = 'uploads/';
    $fn = iconv("utf-8", "cp1251", $_FILES["file"]["name"]);
    move_uploaded_file($_FILES['file']['tmp_name'], $baseDir.$fn);
    echo 'Success';
}