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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как организовать транскрипцию слов для вставки в БД?
Kubert
Отправлено: 22 Апреля, 2010 - 16:43:20
Post Id



Частый гость


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


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




Есть своя админка, необходимо при добавлении новой страны или курорта происходила автоматическая транскрипция названий.
Пример:
Хочу добавить страну Италия
Ввожу несколько фрм с описанием и прочее... И хочу чтобы страница выглядела таким образом
www[dot]сайт[dot]ru/country_view.php?id=italiya

С добавлением конечно проблем нет. но вот с транскрипцией возник вопрос... Логично можно предположить, что каждый символ перевести в "транскриптизированный" символ. типа:
И = I,
и = i,
Т = T
T = t
И так далее...

Помогите пж.

Нужно для того что бы сайт был более оптимизирован для ПС.
спасибо
 
 Top
ZeiZ
Отправлено: 22 Апреля, 2010 - 17:22:28
Post Id



Частый гость


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


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




Могут долго меня пинать за это, но я сделал что-то так:
(не для ссылок, а для создания директорий на сервере)

PHP:
скопировать код в буфер обмена
  1.  
  2. # Играем с транслитом
  3. $translate = $_POST['name'];
  4. $ruswords = array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
  5. $ruswords_big = array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я");
  6. $translit = array("a","b","v","g","d","e","e","j","z","i","y","k","l","m","n","o","p","r","s","t","u","f","h","c","ch","sh","sh","","i","","e","y","ya");
  7. $specialsymbols = array(" ","!","№",";","%",":","?","*","=","@","#","$","^","&amp","~",",","&quot","'","&gt","&lt","\"");
  8. $translit_specs = array("_","","n","","","","","x","","a","","s","","and","","_","","","(",")","");
  9.  
  10. // Меняем большие буковки на маленькие
  11. for($i=0; $i<33; $i++)
  12. {
  13. $translate = str_replace($ruswords_big[$i],$ruswords[$i],$translate);
  14. }
  15. // Меняем на транслит
  16. for($i=0; $i<33; $i++)
  17. {
  18. $translate = str_replace($ruswords[$i],$translit[$i],$translate);
  19. }
  20. // Меняем спецсимволы
  21. for($i=0; $i<33; $i++)
  22. {
  23. $translate = str_replace($specialsymbols[$i],$translit_specs[$i],$translate);
  24. }
  25. $translate = strtolower($translate);
  26. #echo ("СТАЛО:<br />".$translate."<hr>БЫЛО:<br />".$_POST['name']);


Если у кого есть лучше решение, с удовольствием посмотрю.
(Добавление)
А вообще id=italia или id=15 ИМХО для ПС разницы никакой.
более 9000 раз обсуждалось, что не ЧПУ не всякие другие примочки на ЦИТ не влияют, зато для базы будет проще вынуть идшник чем слово + id (AI) повторяться не может в отличии от слов.
 
 Top
Kubert
Отправлено: 23 Апреля, 2010 - 11:10:14
Post Id



Частый гость


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


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




спасибо, попробую.
 
 Top
JustUserR
Отправлено: 23 Апреля, 2010 - 12:00:33
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Kubert Вы можете конечно использовать транслитерированные названия если вам удобно - однако в БД первичным ключтом для поиска должен оставаться ID (Для ускорения поиска) - а также длина транслитерированного названия должна быть ограничена (А то получите HTTP error 414 - слишком длинный GET-запрос)
ZeiZФункция хорошая - но я бы заменял "ж"=>"zh" и "й"=>"j" (Чтобы было взаимно-однозначное преобразование в обратную сторону)
Кроме того можно обойтись без циклом с использованием функции http://php.su/functions/?strtr


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Kubert
Отправлено: 24 Апреля, 2010 - 23:06:26
Post Id



Частый гость


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


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




JustUserR пишет:
Kubert Вы можете конечно использовать транслитерированные названия если вам удобно - однако в БД первичным ключтом для поиска должен оставаться ID (Для ускорения поиска) - а также длина транслитерированного названия должна быть ограничена (А то получите HTTP error 414 - слишком длинный GET-запрос)
ZeiZФункция хорошая - но я бы заменял "ж"=>"zh" и "й"=>"j" (Чтобы было взаимно-однозначное преобразование в обратную сторону)
Кроме того можно обойтись без циклом с использованием функции http://php.su/functions/?strtr


Спасибо за ответ. Вы правы что намного разумнее что бы первичный ключ был ID, это мне понятно. М нет необходимости делать первичным ключем трансл....ющие слова. Мне они необходимы только для урла.
 
 Top
JustUserR
Отправлено: 25 Апреля, 2010 - 12:01:44
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




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


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 26 Апреля, 2010 - 08:23:09
Post Id



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


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


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




JustUserR пишет:
но я бы заменял "ж"=>"zh" и "й"=>"j"


ГОСТ смотрели ? видимо нет.
й => jj
ж => j


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
ZeiZ
Отправлено: 26 Апреля, 2010 - 11:27:00
Post Id



Частый гость


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


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





Viper
Это Где Вы нашли такой ГОСТ?

ГОСТ 7.79—2000:

zh ж
j й
 
 Top
Viper
Отправлено: 26 Апреля, 2010 - 12:09:32
Post Id



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


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


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




ZeiZ ГОСТ 16876-71

(Отредактировано автором: 26 Апреля, 2010 - 12:09:55)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 26 Апреля, 2010 - 12:55:18
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Viper пишет:
ГОСТ смотрели ? видимо нет.
й => jj
ж => j
Действительно не смотрел - спасибо за интересную ссылку на ГОСТ Однако я действительно верно подметил что буквы Ы и Й должны заменяться разными транслитерированными аналогами - иначе не получится однозначного соответствия при обратном переводе текста


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ZeiZ
Отправлено: 26 Апреля, 2010 - 17:32:19
Post Id



Частый гость


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


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




Viper

ГОСТ 7.79-2000

Дата введения: 07/01/2002

Взамен ГОСТ 16876-71.
http://orwell[dot]ru/info/tliter[dot]html
 
 Top
JustUserR
Отправлено: 27 Апреля, 2010 - 13:29:51
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




ZeiZ пишет:
Viper ГОСТ 7.79-2000 Дата введения: 07/01/2002
Взамен ГОСТ 16876-71. http://orwell.ru/info/tliter.html
В общем-то судя по приведенной по ссылке таблице - вариант транслитерации указанные выше является верным только нужно проихвести две замены И кстати как я верно заметил одним из свойств транслитерации обязано быть то - что должна быть однозачная обратная восстанавливаемость - чего также не было в первоначальном варианте


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
0931454574
Отправлено: 24 Апреля, 2011 - 17:53:21
Post Id


Новичок


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


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




Есть более простой способ создания транслита русских слов в латынь) привожу ниже пример.

Функция php strtr

PHP:
скопировать код в буфер обмена
  1. $s = array (" "=>"_");
  2. $pr = "hello o portick fsfsdf fsf !";
  3.  
  4. echo strtr ($pr,$s);

Эта функция меняет все символы в строке на их значение в ассоциативном массиве(пробелы на подчеркивание). Лучше прочесть документацию.

Но скажем массив переменных на которые нужно заменить буквы может выглядить так



и подставляем его в значение для функции strtr! Вот и все) гораздо проще. Кстати проверял на быстродействие и предложенный здесь вариант хуже!
 
 Top
Haron
Отправлено: 25 Апреля, 2011 - 09:44:05
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


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




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


Вот и весь транслит.


-----
И чё?
 
 Top
Чечако
Отправлено: 09 Мая, 2011 - 01:09:49
Post Id


Новичок


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB