-
Notifications
You must be signed in to change notification settings - Fork 2
/
translit.php
69 lines (57 loc) · 2.65 KB
/
translit.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/**
* транслитерация по ГОСТ 7.79-2000 http://transliteration.ru/gost-7-79-2000/
* @param string $string
* @param int $params
* параметры транслитерации
* TRANSLIT_I_MODE2 - использовать второй вариант транслитерации для буквы "и" в "i'"
* TRANSLIT_С_ONLY - использовать только транслитерацию буквы "ц" в "c"
* TRANSLIT_CZ_ONLY - использовать только транслитерацию буквы "ц" в "cz"
* по умолчанию используется рекомендованый вариант транслитерации "ц" в "c" перед буквами I, Е, Y, J,
* в остальных случаях - "cz"
* @return string
*/
define("TRANSLIT_I_VARIANT2", 1);
define("TRANSLIT_C_ONLY", 2);
define("TRANSLIT_CZ_ONLY", 4);
function translit($string, $params = 0) {
// обычные буквы (односимвольные транслитерации)
$cyr = 'абвгдезйклмнопрстуфхьАБВГДЕЗЙКЛМНОПРСТУФХЬ';
$lat = 'abvgdezjklmnoprstufx`ABVGDEZJKLMNOPRSTUFX`';
$result = strtr($string, $cyr, $lat);
// многобуквенные транслитерации (кроме Ц)
$cyr2lat = array(
'ё'=> 'yo', 'Ё'=> 'Yo',
'ж'=> 'zh', 'Ж'=> 'Zh',
'ч'=> 'ch', 'Ч'=> 'Ch',
'ш'=> 'sh', 'Ш'=> 'Sh',
'щ'=> 'shh', 'Щ'=> 'Shh',
'ъ'=> '``', 'Ъ'=> '``',
'ы'=> 'y\'', 'Ы'=> 'Y\'',
'э'=> 'e`', 'Э'=> 'E`',
'ю'=> 'yu', 'Ю'=> 'Yu',
'я'=> 'ya', 'Я'=> 'Ya',
'и'=> $params & TRANSLIT_I_VARIANT2?'i\'':'i',
'И'=> $params & TRANSLIT_I_VARIANT2?'И\'':'И',
);
$result = strtr($result, $cyr2lat);
// поведение для Ц
if(($params & TRANSLIT_C_ONLY) && ($params & TRANSLIT_CZ_ONLY)) {
user_error('Using both TRANSLIT_C_ONLY and TRANSLIT_CZ_ONLY params. Using rule TRANSLIT_C_ONLY.', E_NOTICE);
$result = strtr($result, 'цЦ','cC');
} elseif($params & TRANSLIT_C_ONLY) {
$result = strtr($result, 'цЦ','cC');
} elseif($params & TRANSLIT_CZ_ONLY) {
$result = strtr($result, array('ц' => 'cz', 'Ц' => 'Cz', ));
} else {
// используем рекомендованые правила
$result = strtr($result, array(
'цi' => 'ci', 'Цi' => 'Ci',
'цe' => 'ce', 'Цe' => 'Ce',
'цy' => 'cy', 'Цy' => 'Cy',
'цj' => 'cj', 'Цj' => 'Cj',
'ц' => 'cz', 'Ц' => 'Cz'
));
}
return $result;
}