Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Функция транслитерации русского текста на PHP

26.11.2014 | Категория: Web-мастеру и не только | Автор: ManHunter
Слово "транслитерация" происходит от латинского "transliteratus" ("trans" - "изменение" и "littera" - "буква"). Это метод представления букв одной системы письма либо алфавита буквами другой системы. В быту транслитерация получила широкое распространение для написания SMS в эпоху нерусифицированных сотовых телефонов и для набора текстов на нерусифицированных компьютерах. В Web-строительстве транслитерация обычно используется для создания красивых ЧПУ из заголовков статей и для переименования файлов при их загрузке на сервер.

В интернете немало подобных функций на PHP, но они все имеют общий недостаток: преобразования выполняются посимвольно согласно таблице символов замены, при этом заглавные буквы преобразуются без учета их положения в тексте. Для одиночных заглавных букв это не имеет значения, но буквы, транслитерируемые в два и более символа, в этом случае преобразуются с ошибкой. Поясню на примере. Преобразуем в транслит с простой заменой слова "Япония" и "ЮАР", получится "Yaponiya" и "YuAR". Первое слово нормально, а вот аббревиатура исказилась, ведь должно быть "YUAR". Я написал свою функцию транслитерации, которая учитывает местоположение таких составных букв и, в зависимости от этого, преобразует их в последовательность заглавных или только одну заглавную и строчные буквы. Набор символов в таблице транслитерации у меня отличается от ГОСТ 7.79-2000 "Правила транслитерации кирилловского письма латинским алфавитом", если вам потребуется строгое соответствие, то можете доработать функцию самостоятельно.
  1. //----------------------------------------------------------------------
  2. // Перевод кириллической строки в транслит и исправление умляутов
  3. //----------------------------------------------------------------------
  4. function translit($str$fix_umlauts=false) {
  5.     // Установить опции и кодировку регулярных выражений
  6.     mb_regex_set_options('pd');
  7.     mb_internal_encoding('UTF-8');
  8.  
  9.     // Привести строку к UTF-8
  10.     if (strtolower(mb_detect_encoding($str,
  11.         'utf-8, windows-1251'))=='windows-1251') {
  12.         $str=mb_convert_encoding($str'utf-8''windows-1251');
  13.     }
  14.  
  15.     // Регулярки для удобства
  16.     $regexp1='(?=[A-Z0-9А-Я])';
  17.     $regexp2='(?<=[A-Z0-9А-Я])';
  18.  
  19.     // Массивы для замены заглавных букв, идущих последовательно
  20.     $rus=array(
  21.         '/(Ё'.$regexp1.')|('.$regexp2.'Ё)/u',
  22.         '/(Ж'.$regexp1.')|('.$regexp2.'Ж)/u',
  23.         '/(Ч'.$regexp1.')|('.$regexp2.'Ч)/u',
  24.         '/(Ш'.$regexp1.')|('.$regexp2.'Ш)/u',
  25.         '/(Щ'.$regexp1.')|('.$regexp2.'Щ)/u',
  26.         '/(Ю'.$regexp1.')|('.$regexp2.'Ю)/u',
  27.         '/(Я'.$regexp1.')|('.$regexp2.'Я)/u'
  28.     );
  29.  
  30.     $eng=array(
  31.         'YO','ZH','CH','SH','SCH','YU','YA'
  32.     );
  33.  
  34.     // Заменить заглавные буквы, идущие последовательно
  35.     $str=preg_replace($rus,$eng,$str);
  36.  
  37.     // Массивы для замены одиночных заглавных и строчных букв
  38.     $rus=array(
  39.         '/а/u','/б/u','/в/u','/г/u','/д/u','/е/u','/ё/u',
  40.         '/ж/u','/з/u','/и/u','/й/u','/к/u','/л/u','/м/u',
  41.         '/н/u','/о/u','/п/u','/р/u','/с/u','/т/u','/у/u',
  42.         '/ф/u','/х/u','/ц/u','/ч/u','/ш/u','/щ/u','/ъ/u',
  43.         '/ы/u','/ь/u','/э/u','/ю/u','/я/u',
  44.  
  45.         '/А/u','/Б/u','/В/u','/Г/u','/Д/u','/Е/u','/Ё/u',
  46.         '/Ж/u','/З/u','/И/u','/Й/u','/К/u','/Л/u','/М/u',
  47.         '/Н/u','/О/u','/П/u','/Р/u','/С/u','/Т/u','/У/u',
  48.         '/Ф/u','/Х/u','/Ц/u','/Ч/u','/Ш/u','/Щ/u','/Ъ/u',
  49.         '/Ы/u','/Ь/u','/Э/u','/Ю/u','/Я/u'
  50.     );
  51.  
  52.     $eng=array(
  53.         'a','b','v','g','d','e','yo',
  54.         'zh','z','i','y','k','l','m',
  55.         'n','o','p','r','s','t','u',
  56.         'f','h','c','ch','sh','sch','',
  57.         'i','','e','yu','ya',
  58.  
  59.         'A','B','V','G','D','E','Yo',
  60.         'Zh','Z','I','Y','K','L','M',
  61.         'N','O','P','R','S','T','U',
  62.         'F','H','C','Ch','Sh','Sch','',
  63.         'I','','E','Yu','Ya'
  64.     );
  65.  
  66.     // Заменить оставшиеся заглавные и строчные буквы
  67.     $str=preg_replace($rus,$eng,$str);
  68.  
  69.     // Исправление умляутов и других надсимвольных значков
  70.     if ($fix_umlauts) {
  71.         $str=preg_replace('/&(.)(tilde|uml);/',"$1",
  72.              mb_convert_encoding($str,'HTML-ENTITIES','utf-8'));
  73.     }
  74.  
  75.     return $str;
  76. }
Кроме транслитерации функция исправляет в строке тильды и умляуты, оставляя базовые латинские буквы. На входе первый параметр $str - кириллическая строка в кодировке UTF-8, которую надо транслитерировать. Второй параметр - флаг $fix_umlauts - требуется или нет исправлять умляуты и прочие надстрочные модификаторы символов, по умолчанию значение false. На выходе - преобразованная строка.

Читать статью целиком »
Просмотров: 7927 | Комментариев: 6

Скрипт для генерации эффектных коллажей

23.10.2014 | Категория: Web-мастеру и не только | Автор: ManHunter

Скрипт для генерации эффектных коллажей

Не секрет, что при оформлении статей мне очень нравится использовать коллажи в виде нескольких фотографий, "набросанных" одна на другую. Для этого можно использовать специальные программы или графические редакторы, но я решил пойти чуть дальше и написать скрипт на PHP, который будет генерировать такие изображения. Теперь он используется у меня на фотосайте для генерации превьюшек галерей. Вы можете без особого труда модифицировать его для своих нужд.

Читать статью целиком »
Просмотров: 9198 | Комментариев: 11

Проверка корректности номера банковской карты

04.09.2014 | Категория: Web-мастеру и не только | Автор: ManHunter

Проверка корректности номера банковской карты

Для проверки корректности номера банковской карты используется алгоритм, разработанный еще в 1954 году Хансом Питером Луном, сотрудником фирмы IBM. Этот алгоритм очень прост в реализации на различных языках программирования, и, хоть он не дает 100% гарантии от преднамеренного искажения данных, может легко выявить случайные ошибки при вводе.

Читать статью целиком »
Просмотров: 15791 | Комментариев: 0

Исследование защиты программы MavorsGuard

11.03.2014 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы MavorsGuard

Программа MavorsGuard предназначена для защиты PHP-скриптов от изучения и модификации. Достигается это путем шифрования исходного текста с последующей его расшифровкой непосредственно во время выполнения. За все это требуется выложить некоторую сумму денег.

Читать статью целиком »
Просмотров: 6098 | Комментариев: 6

Как узнать статус ICQ на PHP

21.10.2013 | Категория: Web-мастеру и не только | Автор: ManHunter

Как узнать статус ICQ на PHP

Для получения статуса ICQ на сайтах обычно используется штатная возможность сервиса, а именно ссылка вида:

http://status.icq.com/online.gif?icq=XXXXXXXXX&img=N

Где XXXXXXXXX - номер проверяемой аськи, а N - стиль отображаемой иконки (число от 0 до 27). В ответ приходит картинка статуса с соответствующим стилем. Такой код обычно ставят на сайты, в подпись на форуме и тому подобное. Картинка отображается, все нормально. А как получить статус ICQ в автоматическом режиме? Например, на сервере по планировщику запускается скрипт, который должен отправить некие данные человеку в аську, но только в том случае, если он находится он-лайн. Или надо автоматически контролировать время работы техподдержки, отмечая когда они вышли в онлайн и когда ушли в оффлайн. Или ни одна из предлагаемых стандартных иконок с сервера ICQ не подходит под дизайн вашего сайта, а отображать статус оператора все равно надо. Или для незарегистрированных посетителей ресурса надо скрыть реальные номера ICQ пользователей (их легко узнать из ссылки на картинку статуса), но при этом хочется показать их статус. Это лишь несколько примеров, при желании варианты применения можно придумать еще.

Читать статью целиком »
Просмотров: 6376 | Комментариев: 3

01 ... 13 14 15 16 17 18 19 ... 26
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2026
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 3 (0.0063 сек.) / Память: 4.5 Mb
Наверх