Русские буквы в UTF-8


Часто бывает необходимо работать с кириллицей в UTF-8. PHP до сих не может корректно обрабатывать такие строки. На помощь приходит волшебная функция iconv();

Попробуем обработать русскую строку так, чтобы перевести строку в транслит(например для формирования корректного URL или имени файла для закачки). Напишем функцию rus2lat():

  1. function rus2lat($text) {
  2. $text = substr($text, 0, 250); //обрезаем текст до приличных размеров(для URL)
  3. $rus = array(‘ё’,‘й’,‘ц’,‘у’,‘к’,‘е’,‘н’,‘г’,‘ш’,‘щ’,‘з’,‘х’,‘ъ’,‘ф’,‘ы’,‘в’, ‘а’,‘п’,‘р’,‘о’,‘л’,‘д’,‘ж’,‘э’, ‘я’,‘ч’,‘с’,‘м’,‘и’,‘т’,‘ь’,‘б’,‘ю’, ‘ ‘); //задаем массив русских букв
  4. $eng = array(‘yo’,‘y’,‘c’,‘u’,‘k’,‘e’,‘n’,‘g’,’sh’,’sch’,‘z’,‘h’,‘_’,‘f’,‘i’,‘v’, ‘a’,‘p’,‘r’,‘o’,‘l’,‘d’,‘zh’,‘e’, ‘ya’,‘ch’,’s’,‘m’,‘i’,‘t’,‘_’,‘b’,‘yu’, ‘_’); //соразмерный массив транслита
  5.  
  6. $count = count($rus);
  7.  
  8. for($i = 0;$i <= $count; $i++) { //временно пережимаем всю кириллицу в WIN-1251, для корректной работы
  9. $russ[] = iconv(‘UTF-8′, ‘CP1251//IGNORE’,$rus[$i]); //IGNORE - символы, которых нет в конечной кодировке, будут опущены
  10.  }
  11.  
  12. $word = iconv(‘UTF-8′, ‘CP1251//IGNORE’, $text); //пережимаем текст в WIN-1251
  13. $word = str_replace($russ, $eng, strtolower($word)); //меняем кириллические символы на символы транслита. strtolower можно убрать, тогда придется добавить большие буквы в массивы $rus и $eng.
  14.  
  15. return iconv(‘CP1251//IGNORE’,‘UTF-8′, $word); //возращаем строку в UTF-8
  16. }

Результат работы:

  1. echo rus2lat(‘Привет мир!’); //Hello world. Шутка :) "privet_mir!"
  2.  

Таким же образом можно написать свои функции strtolower_ru(), strtoupper_ru(), ucfirst_ru() и др. Для этого просто надо поиграть со вторым массивом.

, , ,

  1. No comments yet.
(will not be published)
  1. No trackbacks yet.