|
|
|
| Стоит загрузить логотип, названный русскими буквами, то логотип не отображается.
Загрузка логотипа:</b></td><td><input type='file' name='userfile'>";
|
Есть ли возможность решить эту проблему? | |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 20:32)
| | Да, при загрузке переименовывать файл | |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 20:32)
| | А вы как его сохраняете на диск, прямо с русским названием? Если да, то лучше отказаться от этой идеи, так как UNIX-системы на серверах плохо поддерживают файлы с русскими названиями, но даже если они поддерживают их хорошо, у вас будут постоянные проблемы с такими файлами при ссылке на них из HTML-кода, так как русские символы недопустимы.
Лучше при загрузки файла в имени которого есть русские символы, переименовывать его, используя транслит. Возможно вас заинтересует скрипт по ссылке http://softtime.ru/scripts/translit.php. | |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 20:36)
| | так пользователь не знает об этом.
как предугадать что он загрузит свой логотип, названный русскими буквами? | |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 20:43)
| | Не надо предугадывать, просто пропускайте все имена файлов через функцию транслита, если там только английские символы - ничего не произойдет, если часть из них русские - они будут заменены на английские. Понятно, что операцию с именем файла нужно осуществлять до того, как вы будете копировать файл из временной директорию в постоянную при помощи функции copy() или move_uploaded_file(). | |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 20:48)
| |
if ($_FILES['userfile']['error'] === UPLOAD_ERR_OK)
{
// проверяем расширение файла
$file_extension = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION);
if (in_array($file_extension, $valid_extensions))
{
// проверяем размер файла
if ($_FILES['userfile']['size'] < $max_file_size)
{
тут вставляем новую функцию
function encodestring($st)
{
// Сначала заменяем "односимвольные" фонемы.
$st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
"abvgdeeziyklmnoprstufh'iei");
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
"ABVGDEEZIYKLMNOPRSTUFH'IEI");
// Затем - "многосимвольные".
$st=strtr($st,
array(
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
)
);
// Возвращаем результат.
return $st;
}
Далее записываем
$destination ="img/logo_pu/" . $_FILES['userfile']['name'];
|
ПРавильно? | |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 21:23)
| | а Вы запустите свой код и посмотрите, будет он работать или нет, вот тогда и решите, правильно или нет. | |
|
|
|
|
|
|
|
для: Slo_Nik
(05.01.2012 в 21:33)
| | ошибок нет и файл не переименовывается | |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 21:23)
| | Нет не правильно, у вас есть определение функции, но нет её вызова с передайте её имени файла. | |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 21:45)
| | вот так
encodestring ($destination ="img/logo_pu/" . $_FILES['userfile']['name'];
|
| |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 21:53)
| | Видите внутри функции есть строчка
// Возвращаем результат.
return $st;
| это означает, что функция возвращает результат и её вызов должен выглядеть следующим образом
$_FILES['userfile']['name'] = encodestring ($_FILES['userfile']['name']);
| а после этого уже можно формировать переменную $destination. | |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 22:03)
| | картинка переименовывается.
и не только )
сама картинка меняется. принскрин FlashFXP осущетствляется.
Что делать? | |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 22:18)
| |
$_FILES['userfile']['name'] = encodestring ($_FILES['userfile']['name']);
$destination ="img/logo_pu/" . $_FILES['userfile']['name'];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destination))
|
| |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 22:44)
| | может двойные скобки нужны?
$_FILES['userfile']['name'] = encodestring(($_FILES['userfile']['name']));
|
| |
|
|
|
|
|
|
|
для: Василий
(05.01.2012 в 23:04)
| | Тишина ) | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 00:28)
| | Функция ничего с содержимым не делает, если же работоспособность файла зависит от его названия, тут ничего не поделаешь, придется не переименовывать и работать с русскими названиями. Тогда применяйте функцию urlencode() для кодирования имени уже при выводе имени в тэге <img> и или при формировании пути к флеш-ролику, если речь идет о нем. | |
|
|
|
|
|
|
|
для: cheops
(06.01.2012 в 00:51)
| | речь идет о том, что когда грузится jpg файл с русским названием, то он переименовывается на английские буквы, но и при этом картинка перезапивается - вместо логотипа появляется скрин программы.
Если же загружаемый файл с англ буквами - проблем нет | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 00:59)
| | так что подскажите? | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 09:17)
| | Какой программы скрин появляется? | |
|
|
|
|
|
|
|
для: Slo_Nik
(06.01.2012 в 14:48)
| | FlashFXP - программа, которая кидает файлы на сервер | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 15:22)
| | можно избежать использования функции по изменению названия файла на транслит если Вы будете сами, не смотря на то, какое имя у оригинала менять имя файла.
при загрузке файла получаете его расширение, формируете новое имя файл, например временная метка, потом дописываете расширение и в таком виде записываете в директорию
<?php
$ext = strtolower(strstr($_FILES['filename']['name'], '.'));
$newname = date("YmdHis", time()).$ext;
/* под таким именем и загружаете */
|
А откуда берётся скрин программы? | |
|
|
|
|
|
|
|
для: Slo_Nik
(06.01.2012 в 15:52)
| | А откуда берётся скрин программы?
он вместо картинки. Грузили логотип - получили картинку той программы
можно избежать использования функции по изменению названия файла на транслит если Вы будете сами, не смотря на то, какое имя у оригинала менять имя файла.самому то зачем - все для пользователя делается | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 15:56)
| | но чудес же не бывает, где эта картинка у Вас находится?
если Вы грузите файл, то как от может перезаписаться на совершенно другую картинку, ищите это место в коде, где по Вашему мнению происходит подмена. | |
|
|
|
|
|
|
|
для: Slo_Nik
(06.01.2012 в 15:58)
| |
$_FILES['userfile']['name'] = encodestring ($_FILES['userfile']['name']);
$destination ="img/logo_pu/" . $_FILES['userfile']['name'];
|
если убрать верхнюю строку, то чудес и не будет.
Эта функция транслятор все портит | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 16:14)
| | сама функция не может влиять на загружаемый файл, разве, что только на его имя.
давайте оба файла показывайте, с формой и обработчиком
НО!!! Упакуйте эти файлы в архив и прикрепите к своему сообщению | |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 15:56)
| | да не может скрин программы взяться из воздуха!!!
самому то зачем - все для пользователя делается
что именно? имя файла? если сделать так, как я писал, то не будет проблемы с кириллическими символами. и не нужна будет лишняя функция в коде. | |
|
|
|
|
|
|
|
для: Slo_Nik
(06.01.2012 в 16:19)
| | значит функцию транслита долой?
ставим это?
<?php
$ext = strtolower(strstr($_FILES['filename']['name'], '.'));
$newname = date("YmdHis", time()).$ext;
/* под таким именем и загружаете */
|
| |
|
|
|
|
|
|
|
для: Василий
(06.01.2012 в 16:49)
| | Это только Вам решать, мне ни чего не надо ставить ни в какой код....
Но я бы на Вашем месте разобрался бы ещё и с функцией.... | |
|
|
|