PHP перекодировка и транслит

Редакция автор: stain

Иногда нужно чтобы русские имена оставались русскими. поэтому к примеру при загрузке файлов на сервер, нужно при выставленной локали в utf8, перекодировать результирующий файл в 1251, подобным образом $in_windows_1251=iconv("UTF-8", "windows-1251", $in_UTF);, где $in_UTF - строка в кодировке utf8

$in_windows_1251='Скачать всё';
$in_UTF=iconv("windows-1251", "UTF-8", $in_windows_1251);
echo $in_UTF.'
'; $in_UTF='Скачать всё'; $in_windows_1251=iconv("UTF-8", "windows-1251", $in_UTF); echo $in_windows_1251;

Обратный транслит.

По сути он мало чем отличается от обычного, Самый важный аспект, это очередность, надо выставлять в массиве переменные таким образом чтобы сначала шли все много-буквенные выражения, причем обе вариации Щ щ должны идти самыми первыми.Твердый знак конфликтовал с мягким заменил пока hh на hd для твердого.

function translitback($str) {
    $lat = array('Sch', 'sch', 'Ch', 'Sh',  'Hd', 'Ih', 'Jh', 'Eh', 'Yu', 'Ya', 'Gh','Yo', 'yo', 'ch', 'sh', 'hd', 'ih', 'jh', 'eh', 'yu', 'ya', 'gh', 'A', 'B', 'V', 'G', 'D', 'E', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C',  'a', 'b', 'v', 'g', 'd', 'e', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c');
    $rus = array(  'Щ',   'щ',  'Ч',  'Ш',   'Ъ',  'Ы',  'Ь',  'Э',  'Ю',  'Я', 'Ж',  'Ё',  'ё',  'ч',  'ш',  'ъ',  'ы',  'ь',  'э',  'ю',  'я', 'ж',  'А', 'Б', 'В', 'Г', 'Д', 'Е', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц',  'а', 'б', 'в', 'г', 'д', 'е', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц');
    return str_replace($lat, $rus, $str);
  }

Вызов.
$str = translitback($str);

Что еще можно сделать.

$str = str_replace("_"," ",$str);//замена подчеркиваний пробелами
$str = str_replace("-"," ",$str);//замена тире пробелами
$str = trim($zag);//убираем пробелы по бокам
$str = preg_replace("/ {2,}/"," ",$str);//убираем лишние пробелы внутри строки
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); // верхний регистр первому символу строки

Остальное не так важно.
Я транслитил транслитил, и перетранслитил, и помог мне транслитер.
Проверено работает.

  function translit($str) {
    $rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
    $lat = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya');
    return str_replace($rus, $lat, $str);
  }
  echo translit("Всем привет!");

Еще вариант.
Можете проверить ))), мне хватило первого варианта.

function rus2translit($string) {
    $converter = array(
        'а' => 'a',   'б' => 'b',   'в' => 'v',
        'г' => 'g',   'д' => 'd',   'е' => 'e',
        'ё' => 'e',   'ж' => 'zh',  'з' => 'z',
        'и' => 'i',   'й' => 'y',   'к' => 'k',
        'л' => 'l',   'м' => 'm',   'н' => 'n',
        'о' => 'o',   'п' => 'p',   'р' => 'r',
        'с' => 's',   'т' => 't',   'у' => 'u',
        'ф' => 'f',   'х' => 'h',   'ц' => 'c',
        'ч' => 'ch',  'ш' => 'sh',  'щ' => 'sch',
        'ь' => '\'',  'ы' => 'y',   'ъ' => '\'',
        'э' => 'e',   'ю' => 'yu',  'я' => 'ya',
        
        'А' => 'A',   'Б' => 'B',   'В' => 'V',
        'Г' => 'G',   'Д' => 'D',   'Е' => 'E',
        'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',
        'И' => 'I',   'Й' => 'Y',   'К' => 'K',
        'Л' => 'L',   'М' => 'M',   'Н' => 'N',
        'О' => 'O',   'П' => 'P',   'Р' => 'R',
        'С' => 'S',   'Т' => 'T',   'У' => 'U',
        'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',
        'Ч' => 'Ch',  'Ш' => 'Sh',  'Щ' => 'Sch',
        'Ь' => '\'',  'Ы' => 'Y',   'Ъ' => '\'',
        'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya',
    );
    return strtr($string, $converter);
}
function str2url($str) {
    // переводим в транслит
    $str = rus2translit($str);
    // в нижний регистр
    $str = strtolower($str);
    // заменям все ненужное нам на "-"
    $str = preg_replace('~[^-a-z0-9_]+~u', '-', $str);
    // удаляем начальные и конечные '-'
    $str = trim($str, "-");
    return $str;
}

+ ниже требует доработки, глючит.

// Транслитерация строк.
function transliterate($st) {
  $st = strtr($st, 
    "абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ",
    "abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE"
  );
  $st = strtr($st, array(
    'ё'=>"yo",    'х'=>"h",  'ц'=>"ts",  'ч'=>"ch", 'ш'=>"sh",  
    'щ'=>"shch",  'ъ'=>'',   'ь'=>'',    'ю'=>"yu", 'я'=>"ya",
    'Ё'=>"Yo",    'Х'=>"H",  'Ц'=>"Ts",  'Ч'=>"Ch", 'Ш'=>"Sh",
    'Щ'=>"Shch",  'Ъ'=>'',   'Ь'=>'',    'Ю'=>"Yu", 'Я'=>"Ya",
  ));
  return $st;
}
echo transliterate("У попа была собака, он ее любил.");

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.