Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: перевод кирилицы в транслит

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
foozzi
Отправлено: 29 Января, 2012 - 02:32:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




есть функция, перевода кирилицы в транслит
PHP:
скопировать код в буфер обмена
  1. function translitIt($file_name)
  2. {
  3.         global $tr;
  4.     $tr = array(
  5.         "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
  6.         "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
  7.         "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
  8.         "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
  9.         "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
  10.         "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
  11.         "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
  12.         "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
  13.         "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
  14.         "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
  15.         "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
  16.         "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
  17.         "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
  18.     );
  19.     return strtr($file_name,$tr);
  20. }              
  21. if (preg_match('/[^A-Za-z0-9_\-]/', $file_name)) {
  22.     $file_name = translitIt($file_name);
  23.     $file_name = preg_replace('/[^A-Za-z0-9_\-]/', '.', $file_name);
  24. };


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


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
LIME
Отправлено: 29 Января, 2012 - 02:54:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




во-первых непонятно зачем $tr объявлять глобальной
foozzi пишет:
if (preg_match('/[^A-Za-z0-9_\-]/', $file_name)) {
    $file_name = translitIt($file_name);
    $file_name = preg_replace('/[^A-Za-z0-9_\-]/', '.', $file_name);
};
логикая такая
если в имени файла есть англ буквы цифры или знаки _-
запускается блок (непонятно зачем проверять цифры и знаки но наверное надо)
в нем меняются все русские буквы на анг
потом все анг буквы цифры итд меняются на точки
все как и должно
 
 Top
foozzi
Отправлено: 29 Января, 2012 - 04:15:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




LIME пишет:
во-первых непонятно зачем $tr объявлять глобальной
foozzi пишет:
if (preg_match('/[^A-Za-z0-9_\-]/', $file_name)) {
    $file_name = translitIt($file_name);
    $file_name = preg_replace('/[^A-Za-z0-9_\-]/', '.', $file_name);
};
логикая такая
если в имени файла есть англ буквы цифры или знаки _-
запускается блок (непонятно зачем проверять цифры и знаки но наверное надо)
в нем меняются все русские буквы на анг
потом все анг буквы цифры итд меняются на точки
все как и должно


хм...пытался сделать что бы было так как надо, но не выходит как надо... как сделать так что бы убирались все символы типа @"/ - и др. и был чистый странслит?


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
LIME
Отправлено: 29 Января, 2012 - 04:27:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




оп нет
я чтото невнимательно код смотрел
все вроде правильно
запустите код отдельно без всяких проверок(кстати ненужных, тут быстрее сразу транслит запускать всегда)
всучив ф-ции строку и смотреть вар_дамп результата отдельно
ну обычный дебаг
не пробовали?????
 
 Top
foozzi
Отправлено: 29 Января, 2012 - 04:53:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




LIME пишет:
оп нет
я чтото невнимательно код смотрел
все вроде правильно
запустите код отдельно без всяких проверок(кстати ненужных, тут быстрее сразу транслит запускать всегда)
всучив ф-ции строку и смотреть вар_дамп результата отдельно
ну обычный дебаг
не пробовали?????


без кода работает правильно.
вот весь код обработки файла
http://pastebin[dot]com/hUthHVvw


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
LIME
Отправлено: 29 Января, 2012 - 05:02:38
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




 
 Top
foozzi
Отправлено: 29 Января, 2012 - 13:54:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)





дебагал уже, ничего не выдало


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
LIME
Отправлено: 29 Января, 2012 - 14:30:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а что должно было выдать?
(Добавление)
ошибку?
 
 Top
foozzi
Отправлено: 29 Января, 2012 - 15:03:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




LIME пишет:
а что должно было выдать?
(Добавление)
ошибку?

ну да ошибку, но их нет


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
LIME
Отправлено: 29 Января, 2012 - 15:06:50
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




foozzi еще раз перечитайте статью по ссылке
и лучше не один
проверяйте значения параметров на входе/выходе ф-ций
возможно получите неожиданные результаты
 
 Top
foozzi
Отправлено: 29 Января, 2012 - 16:21:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




LIME пишет:
foozzi еще раз перечитайте статью по ссылке
и лучше не один
проверяйте значения параметров на входе/выходе ф-ций
возможно получите неожиданные результаты


перечитал только что 2 раза, наверное я туп, ткни дурака носом(


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
LIME
Отправлено: 29 Января, 2012 - 17:59:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




foozzi пишет:
if (preg_match('/[^A-Za-z0-9_\-]/', $file_name)) {
    $file_name = translitIt($file_name);
    $file_name = preg_replace('/[^A-Za-z0-9_\-]/', '.', $file_name);
};
ну например
PHP:
скопировать код в буфер обмена
  1. if (preg_match('/[^A-Za-z0-9_\-]/', $file_name)) {
  2. echo $file_name.'<br><hr>' ;
  3.    echo  $file_name = translitIt($file_name);
  4.     $file_name = preg_replace('/[^A-Za-z0-9_\-]/', '.', $file_name);
  5. };
 
 Top
armancho7777777 Супермодератор
Отправлено: 29 Января, 2012 - 19:15:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




А зачем регулярка там?))
Вот без неё:

PHP:
скопировать код в буфер обмена
  1.  
  2. function translitIt($file_name)
  3.  
  4. {
  5.  
  6.     $tr = array(
  7.         "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
  8.         "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
  9.         "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
  10.         "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
  11.         "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
  12.         "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
  13.         "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
  14.         "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
  15.         "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
  16.         "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
  17.         "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
  18.         "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
  19.         "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
  20.     );
  21.  
  22.  
  23.         foreach($tr as $ru => $en){
  24.           $str = str_replace($ru, $en, $file_name);    
  25.         }
  26.  
  27.       return $str;
  28.  
  29. }
  30.  


Или так:
PHP:
скопировать код в буфер обмена
  1.  
  2. function translitIt($file_name)
  3.  
  4. {
  5.  
  6.     $tr = array(
  7.         "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
  8.         "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
  9.         "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
  10.         "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
  11.         "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
  12.         "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
  13.         "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
  14.         "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
  15.         "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
  16.         "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
  17.         "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
  18.         "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
  19.         "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
  20.     );
  21.  
  22.  
  23.        
  24.         foreach($tr as $r => $e){
  25.                 $ru[] = $r;
  26.                 $en[] = $e;
  27.         }
  28.        
  29.         return str_replace($ru, $en, $file_name);
  30.  
  31. }
  32.  

(Отредактировано автором: 29 Января, 2012 - 19:18:29)

 
 Top
LIME
Отправлено: 29 Января, 2012 - 19:28:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




armancho7777777 регулярки вне ф-ции
вниматошнее)) strtr()
 
 Top
foozzi
Отправлено: 29 Января, 2012 - 23:08:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




armancho7777777, спасибо, но чет я вогнать не могу, как все таки вывести переменную $file_name уже в транслите..

вот почти 2 одинаковых кода с той же функцией (регулярка)
тут работает нормально http://pastebin[dot]com/zRGH5PJW
тут заменяет русские символы точками http://pastebin.com/1hRWEtfu

(Отредактировано автором: 29 Января, 2012 - 23:13:59)



-----
90% ошибок находятся в полуметре от монитора...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB