Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
2 / 2 / 1
Регистрация: 29.07.2013
Сообщений: 30

Загрузка файлов: ошибка кодировки при загрузке

29.08.2013, 13:50. Показов 5993. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Подскажите, как исправить ошибку с загрузкой файлов. Если имя файла указано русскими буквами, при загрузке сбивается на моей звезде.

Базовая кодировка указана через .htaccess
AddDefaultCharset UTF-8

Также указана в файле:
HTML5
1
<meta http-equiv=”Content-Typecontent=text/html; charset=UTF-8/>
и в форме
HTML5
1
<form name="myform" action="index.php" method="post" enctype="multipart/form-data" accept-charset="utf-8" >
Все файлы сохранены в utf-8, скрипт на загрузку:

PHP
1
2
$uploadfile = $dir."/".$file["name"];
return move_uploaded_file($file["tmp_name"], $uploadfile);
Через print_r выводит верно:
Array ( [name] => моей звезде.mp3

А при сохранении сбой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2013, 13:50
Ответы с готовыми решениями:

Бездисковая загрузка, ошибка windows при загрузке
Доброго времени суток, нужна помощь знатоков бездисковой загрузки. Для бездисковой загрузки мы используем tftpd64 и ISCSI console. как...

Ошибка при загрузке dt файлов
Добрый, ошибка при загрузке dt файлов что может быть?

Ошибка при загрузке файлов на сервер
Появилась такая проблема, загружаю файл на сервер и в конце загрузки мне выдаёт вот это: После закрываю окно загрузки, открываю...

2
 Аватар для AndreyDyakonov
122 / 120 / 7
Регистрация: 21.04.2013
Сообщений: 615
01.09.2013, 12:29
подниму тему.. задачи похожие.. у Trueobject, файл сохраняется кракозябрами.. это не страшно(если бы у меня так сохранялся ). Если в загружаемом файле есть недопустимые символы они просто уничтожаются и в результате чисто русский файл опять имеет недопустимое(пустое) имя.. Не могу добиться чтобы пых хоть как-то сохранял такой файл... код ошибки 1. Покажите, кто знает, пример!

Добавлено через 9 минут
разобрался с ошибкой... грузил мптришки с русскими именами, здоровые, они просто лимит не укладывались... идиот.. в ближайшее время выложу пример по загрузке и скачке файлов не соответствующих стандартам(русские буквы пробелы)

Добавлено через 17 часов 59 минут
В общем ничего толкового в инете не нашел, только общие рассуждения и что пользователи сохраняющие кириллические файлы кАзлы.. наваял загрузку и скачивание файлов с кириллическими именами. Пример сильно упрощенный и в говнокодном стиле, но это лишь иллюстрация принципа решения задачи..
файл index.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?
$uploaded = false; //была ли загрузка файла
$error = false; //была ли ошибка
$lat_filename = ''; //сюда будем писать корректное имя файла
 
/*
 * для прямого и обратного преобразования имени файла
 */
$url_translit = array(
    'а' => 'a', 'б' => 'b', 'в' => 'v',
    'г' => 'g', 'д' => 'd', 'е' => 'e',
    'ё' => 'yo', 'ж' => 'zh', 'з' => 'z',
    'и' => 'i', 'й' => 'j', 'к' => 'k',
    'л' => 'l', 'м' => 'm', 'н' => 'n',
    'о' => 'o', 'п' => 'p', 'р' => 'r',
    'с' => 's', 'т' => 't', 'у' => 'u',
    'ф' => 'f', 'х' => 'x', 'ц' => 'c',
    'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shh',
    'ь' => '\'', 'ы' => 'y', 'ъ' => '\'\'',
    'э' => 'e\'', 'ю' => 'yu', 'я' => 'ya',
    'А' => 'A', 'Б' => 'B', 'В' => 'V',
    'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
    'Ё' => 'YO', 'Ж' => 'Zh', 'З' => 'Z',
    'И' => 'I', 'Й' => 'J', 'К' => 'K',
    'Л' => 'L', 'М' => 'M', 'Н' => 'N',
    'О' => 'O', 'П' => 'P', 'Р' => 'R',
    'С' => 'S', 'Т' => 'T', 'У' => 'U',
    'Ф' => 'F', 'Х' => 'X', 'Ц' => 'C',
    'Ч' => 'CH', 'Ш' => 'SH', 'Щ' => 'SHH',
    'Ь' => '\'', 'Ы' => 'Y\'', 'Ъ' => '\'\'',
    'Э' => 'E\'', 'Ю' => 'YU', 'Я' => 'YA',
    ' ' => '-'
);
 
/* произведена попытка загрузки файла на сервер */
if (isset($_FILES['file'])) {
  //получаем "правильное" имя
  $lat_filename = strtr($_FILES['file']['name'], $url_translit);
 
  if (move_uploaded_file($_FILES['file']['tmp_name'], __DIR__ . '/' . $lat_filename)) {
    $uploaded = true;
  } else {
    $error = 'Ошибка загрузки<br/>' . print_r($_FILES['file'], true) . '<br/>';
  }
}
 
/* юзер хочет скачать файл, этот файл хранится под латинским именем, ссылка передается
 * через _GET['download'],но пользователь должен получить его с "родным" русским именем
 * для получения родного имени делаем обратный транслит, это только для примера, 
 * алгоритм нужен более серьезный, чтобы не портить имена. Проще всего
 * сохранять их в базе данных
 */
if (isset($_GET['download'])) {
  $lat_filename = __DIR__ . '/' . $_GET['download'];
  if (!file_exists($lat_filename)) {
    header('HTTP/1.0 404 Not Found');
    exit();
  }
  $fh = fopen($lat_filename, 'rb');
  $content = fread($fh, filesize($lat_filename));
  fclose($fh);
  
  //разделим расширение и имя файла  
  $path_info = pathinfo($lat_filename);
  /*обратный транслит только для имени файла(повторюсь в данном алгоритме восстановлния
   * имени оно может быть испорчено, храните правильные имена в базе данных) 
   */
  $rus_filename = strtr($path_info['filename'], array_flip($url_translit)) . '.' .
          $path_info['extension'];
  
  header('HTTP/1.1 200 OK');
  header('Content-Disposition: attachment; filename=' . $rus_filename);
  echo $content;
  exit();
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
  </head>
  <body>
    <?= $error?>
    <? if($uploaded){?>
     <p><!-- даем ссылку на скачивание файла -->
      <a href="index.php?download=<?= $lat_filename?>">Скачать <?=  $_FILES['file']['name']?></a>
    </p>
    <p><a href="index.php">Обновить</a></p>
    <?}else{?>
    <!-- форма загрузки -->
    <form name="upload-form" method="post" action="/index.php" enctype="multipart/form-data">
     <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
      <input type="file" name="file"/>
      <input type="submit" value="OK"/>
    </form>   
  <?}?>
  </body>
</html>
3
01.09.2013, 12:36

Не по теме:

..а еще есть прикол с basename и русскими буквами..

PHP
1
echo basename('привет пока');
Спасает
PHP
1
setlocale(LC_ALL, 'ru_RU.UTF8');
Быть может, здесь тоже поможет?

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.09.2013, 12:36
Помогаю со студенческими работами здесь

Ошибка (503) при загрузке с Ftp файлов
Здравствуйте, есть задача загрузить все файлы, находящиеся в определённой папке на ftp. Получаю список файлов на сервере в...

Написал простенький файловый сервер, ошибка при загрузке файлов
По-быстрому с целью ознакомления написал небольшой файловый сервер Из handle функции, если путь соответствует регулярному выражению,...

Ошибка при загрузке файлов в базу данных MSSQL 2008
Доброго времени суток! Возникла проблема с загрузкой файлов в базу данных MSSQL 2008 в поле VARBINARY(max). При загрузке любых...

ICS - Internet Connection Sharing. Ошибка CRC при загрузке файлов на клиентском ПК
Проблема: ICS настроено и работает, но закаченные клиентским ПК файлы оказываются битыми. Повреждение - случайно. Мелкие файлы (&lt; сотен...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru