Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86

Транслитерация загружаемых файлов на PHP

31.10.2014, 04:34. Показов 6429. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я криворукий (ну т.е. начинающий) PHP-программист, и есть у меня такая проблема: у меня есть скрипт загрузки файлов в указанную директорию, но по плачевному стечению обстоятельств - русское наименование файла не может быть ссылкой, поэтому я пробовал сделать транслитерацию загружаемого файла, но у меня ничего не вышло... Поэтому обращаюсь к более опытным PHP-прогерам!

вот собственно сам код загрузки файлов, в котором мне нужно сделать транслитерацию:

PHP/HTML
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
<?php
if ( isset ( $_POST["send"] ) ) {
    $filetype = array ( 'jpg', 'gif', 'png', 'jpeg', 'bmp' );  //разрешенные форматы
    $upfiletype = substr( $_FILES['upfile']['name'],  strrpos( $_FILES['upfile']['name'], "." ) + 1 );
    $direct = '/home/casualrules.ru/www/img/galery/';  //это сама директория, куда заливаются файлы на моем сайте
    if ( in_array ( $upfiletype, $filetype ) ) {
        if ( $_FILES["upfile"]["size"] > 1024*1024*10 ) {  //это максимальный размер загружаемого файла
            echo ( "<b>Размер файла превышает допустимый.</b>" );
        } else {
            if ( is_uploaded_file ( $_FILES["upfile"]["tmp_name"] ) ) {
                if ( move_uploaded_file ( $_FILES["upfile"]["tmp_name"], $direct.$_FILES["upfile"]["name"] ) ) {
                    echo "<b>Файл успешно загружен!</b>";
                } else {
                    echo "<b>Файл не удалось загрузить на сервер.</b>";
                }
            } else {
                echo "<b>Файл загрузить не удалось.</b>";
            }
        }
    } else {
        echo "<b>Формат этого файла не подходит для данного раздела сайта!</b>";
    }
} 
 
?>

Если кому интересно или хотя бы не сложно, помогите новичку!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2014, 04:34
Ответы с готовыми решениями:

Ограничение на количество загружаемых файлов в php.ini и ошибка типа Warning
Есть форма, работающая через jQuery.ajax. Три поля - название (input text), описание (textarea) и загрузка файлов (input file multiple)....

Проверка загружаемых файлов
Как сделать, чтобы форма отправлялось только, если все загружаемые файлы прошли проверку на разрешённые форматы? А если хоть один файл не...

Имена загружаемых файлов
Возникла проблема с именем загруженного файла. А именно в том, что если загружать файлы в именах, которых присутствует кириллица, то там...

11
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
31.10.2014, 07:11
Лучший ответ Сообщение было отмечено feudor5599 как решение

Решение

feudor5599, значит так, создайте файл, в котором будут находится у Вас основные функции. Запишите в него вот такую функцию:
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
/**
    * Для перевода кириллицы в латиницу
    * @param $string - строка, которую нужно перевести
    * 
    * @return переведённую строку
    */
    function translate($string) {
        # Замена символов
        $replace = [
            'а' => 'a',   'б' => 'b',
            'в' => 'v',   'г' => 'g',
            'д' => 'd',   'е' => 'e',
            'ё' => 'yo',  'ж' => 'j',
            'з' => 'z',   'и' => 'i',
            'й' => 'y',   'к' => 'k',
            'л' => 'l',   'м' => 'm',
            'н' => 'n',   'о' => 'o',
            'п' => 'p',   'р' => 'r',
            'с' => 's',   'т' => 't',
            'у' => 'u',   'ф' => 'f',
            'х' => 'h',   'ц' => 'ts',
            'ч' => 'ch',  'ш' => 'sh',
            'щ' => 'sch', 'ъ' => '',
            'ы' => 'i',   'ь' => '',
            'э' => 'e',   'ю' => 'ju',
            'я' => 'ja',  ' ' => '-'
        ];
        
        # Переводим строку в нижний регистр
        $string = mb_strtolower($string, 'utf-8');
        
        # Заменяем
        $string = strtr($string, $replace);
        
        # Заменяем все лишние символы и возвращаем
        return
            preg_replace('~[^a-z\-]~', null, $string);
    }
Видите в коде mb_strtolower? Там кодировка стоит UTF-8. Если у Вас кодировка windows-1251, замените эту строку:
PHP
1
$string = mb_strtolower($string, 'utf-8');
На эту:
PHP
1
$string = strtolower($string);
Теперь, подключите файл с функциями к Вашему скрипту:
PHP
1
require( 'путь/к/файлу/с/функциями.php' );
В том месте, где надо перекодировать кириллицу в латиницу сделайте так:
PHP
1
translate( $string );
Где $string - переменная с переводимой строкой.
Конечный вид:
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
<?php
# Подключаем функции
require( 'путь/к/файлу/с/функциями.php' );
 
if ( isset ( $_POST["send"] ) ) {
    $filetype = array ( 'jpg', 'gif', 'png', 'jpeg', 'bmp' );  //разрешенные форматы
    $upfiletype = substr( $_FILES['upfile']['name'],  strrpos( $_FILES['upfile']['name'], "." ) + 1 );
    $direct = '/home/casualrules.ru/www/img/galery/';  //это сама директория, куда заливаются файлы на моем сайте
    if ( in_array ( $upfiletype, $filetype ) ) {
        if ( $_FILES["upfile"]["size"] > 1024*1024*10 ) {  //это максимальный размер загружаемого файла
            echo ( "<b>Размер файла превышает допустимый.</b>" );
        } else {
            if ( is_uploaded_file ( $_FILES["upfile"]["tmp_name"] ) ) {
                # Тут переводим кириллицу в латиницу
                $name = translate( $_FILES["upfile"]["name"] );
                
                if ( move_uploaded_file ( $_FILES["upfile"]["tmp_name"], $direct . $name ) ) {
                    echo "<b>Файл успешно загружен!</b>";
                } else {
                    echo "<b>Файл не удалось загрузить на сервер.</b>";
                }
            } else {
                echo "<b>Файл загрузить не удалось.</b>";
            }
        }
    } else {
        echo "<b>Формат этого файла не подходит для данного раздела сайта!</b>";
    }
} 
 
?>
1
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86
31.10.2014, 07:40  [ТС]
lyod, Сервер выдаёт какую-то ошибку в коде файла, где хранится замена букв!

Добавлено через 5 минут
lyod, вот в этом коде ошибка:

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
/**
    * Для перевода кириллицы в латиницу
    * @param $string - строка, которую нужно перевести
    * 
    * @return переведённую строку
    */
    function translate($string) {
        # Замена символов
        $replace = [
            'а' => 'a',   'б' => 'b',
            'в' => 'v',   'г' => 'g',
            'д' => 'd',   'е' => 'e',
            'ё' => 'yo',  'ж' => 'j',
            'з' => 'z',   'и' => 'i',
            'й' => 'y',   'к' => 'k',
            'л' => 'l',   'м' => 'm',
            'н' => 'n',   'о' => 'o',
            'п' => 'p',   'р' => 'r',
            'с' => 's',   'т' => 't',
            'у' => 'u',   'ф' => 'f',
            'х' => 'h',   'ц' => 'ts',
            'ч' => 'ch',  'ш' => 'sh',
            'щ' => 'sch', 'ъ' => '',
            'ы' => 'i',   'ь' => '',
            'э' => 'e',   'ю' => 'ju',
            'я' => 'ja',  ' ' => '-'
        ];
        
        # Переводим строку в нижний регистр
        $string = mb_strtolower($string, 'utf-8');
        
        # Заменяем
        $string = strtr($string, $replace);
        
        # Заменяем все лишние символы и возвращаем
        return
            preg_replace('~[^a-z\-]~', null, $string);
    }
сперва сервер указал на квадратную скобку, мол ошибка это, потом я исправил, но появилась новая ошибка: Parse error: syntax error, unexpected T_DOUBLE_ARROW
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
31.10.2014, 07:44
Лучший ответ Сообщение было отмечено feudor5599 как решение

Решение

У Вас версия php просто ниже 5.4 Вот он и не принимает такое создание массива: [];
Значит так, открывающую скобку [ после "$replace = " замените на "array(", а закрывающую ] на обычную закрывающую скобку.

Добавлено через 30 секунд
Итоговый вид:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Замена символов
        $replace = array(
            'а' => 'a',   'б' => 'b',
            'в' => 'v',   'г' => 'g',
            'д' => 'd',   'е' => 'e',
            'ё' => 'yo',  'ж' => 'j',
            'з' => 'z',   'и' => 'i',
            'й' => 'y',   'к' => 'k',
            'л' => 'l',   'м' => 'm',
            'н' => 'n',   'о' => 'o',
            'п' => 'p',   'р' => 'r',
            'с' => 's',   'т' => 't',
            'у' => 'u',   'ф' => 'f',
            'х' => 'h',   'ц' => 'ts',
            'ч' => 'ch',  'ш' => 'sh',
            'щ' => 'sch', 'ъ' => '',
            'ы' => 'i',   'ь' => '',
            'э' => 'e',   'ю' => 'ju',
            'я' => 'ja',  ' ' => '-'
        );
1
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86
31.10.2014, 07:46  [ТС]
lyod, огромное спасибо! вы прям мастер в PHP! теперь всё работает отменно!
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
31.10.2014, 07:50
feudor5599, слушайте, а вообще, нужен ли там перевод? Может просто создавать имя из хаотичного набора символов? Хотя хозяин - барин. Нравится, чтобы имена были понятные - используйте переводчик.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от feudor5599 Посмотреть сообщение
вы прям мастер в PHP!
Ну, до мастера ещё далековато. Не стоит перехваливать. :)


Рад был помочь.
0
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86
31.10.2014, 07:57  [ТС]
lyod, видите в чем загвоздка, мы работаем над одним проектом, создаем игру, понадобился сайт игрового проекта, где будем выкладывать нужную информацию, в том числе и картинки, их там много, имена разные бывают, поэтому до ручного перевода нету времени! лично я не создаю игру, я разрабатываю сайт, игру делают другие люди! сайты я создаю уже 2 года, но в php я новичок, месяц только работаю, поглощаю знания! раньше только верстал, но вдруг решил автоматизировать работу своих сайтов и занялся php!!!! и всё же огромное спасибо!! но есть еще один вопрос! сейчас протестировал скрипт, всё работает, только цифры почему-то исчезают, а у нас картинки очень часто идут с номерами, как исправить эту ситуацию???
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
31.10.2014, 08:08
Лучший ответ Сообщение было отмечено feudor5599 как решение

Решение

Цитата Сообщение от feudor5599 Посмотреть сообщение
только цифры почему-то исчезают
Вот тут вырезается всё, кроме букв и дефиса:
PHP
1
preg_replace('~[^a-z\-]~', null, $string);
Чтобы оставались и цифры, можно сделать так:
PHP
1
preg_replace('~[^\w\-]~', null, $string)
1
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86
31.10.2014, 08:12  [ТС]
lyod, спасибо еще раз!! можно будет еще обратиться?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
31.10.2014, 08:17
Цитата Сообщение от feudor5599 Посмотреть сообщение
спасибо еще раз
Не за что.
Цитата Сообщение от feudor5599 Посмотреть сообщение
можно будет еще обратиться?
Разумеется
0
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86
31.10.2014, 11:16  [ТС]
lyod, ну вообще обращусь еще по одной проблеме! я создал новую тему, вот, перейди по ссылке, там я все разъяснил, как смог!! Удаление файла из директории
0
 Аватар для feudor5599
12 / 12 / 4
Регистрация: 31.10.2014
Сообщений: 86
16.02.2015, 04:43  [ТС]
lyod, привет, я снова к тебе обращаюсь, можешь помочь? мне нужно переделать авторизацию с сессий на на cookie, но так и не сумел понять, как это сделать, вот ссылка с темой: Cookie в авторизации помоги подработать код!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2015, 04:43
Помогаю со студенческими работами здесь

Сосчитать количеств загружаемых файлов
друзья расскажите пожалуйста как посчитать колличество загруженных файлов через форму &lt;input type=&quot;file&quot; multiple...

Проверка типов загружаемых файлов.
В общем нужно загрузить 3-4 файла быть. Могут быть (проверка на js есть), далее нужно проверять на стороне сервера. Проверок на картинки...

Изменить формат загружаемых файлов
Мне нужен простой загрузчик муз. файлов( mp3, wav). Нашел урок: http://www.codeharmony.ru/materials/143 Хотел сделать по нему. Но, он для...

Добавить форматы загружаемых файлов в форму
Здравствуйте! Возможно глупый вопрос, но в PHP я ноль, только только начал изучать в связи с заданием. Так вот есть сайт на typo3, на...

Проверка загружаемых файлов
Здравствуйте. 1) С помощью php загружаю через multiple сразу несколько файлов. У меня есть массив допустимых расширений. Как сделать,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru