Repository navigation
Expand file tree
/
Copy pathTranslit.php
More file actions
120 lines (109 loc) · 4.24 KB
/
Copy pathTranslit.php
File metadata and controls
120 lines (109 loc) · 4.24 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
namespace php_rutils;
/**
* Simple transliteration
* Class Translit
* @package php_rutils
*/
class Translit
{
private static $_TRANSLATION_TABLE = array(
array("'", "'"),
array('"', '"'),
array("‘", "'"),
array("’", "'"),
array("«", '"'),
array("»", '"'),
array("“", '"'),
array("”", '"'),
array("–", "-"), // en dash
array("—", "-"), // em dash
array("‒", "-"), // figure dash
array("−", "-"), // minus
array("…", "..."),
array("№", "#"),
// three-symbols replacements
array('э', 'je'), array('ё', 'jo'), array('я', 'ya'), array('ю', 'yu'), array('ы', 'y'), array('ж', 'zh'),
array('й', 'y'), array('щ', 'shch'), array('ч', 'ch'), array('ш', 'sh'), array('э', 'ea'), array('а', 'a'),
array('б', 'b'), array('в', 'v'), array('г', 'g'), array('д', 'd'), array('е', 'e'), array('з', 'z'),
array('и', 'i'), array('к', 'k'), array('л', 'l'), array('м', 'm'), array('н', 'n'), array('о', 'o'),
array('п', 'p'), array('р', 'r'), array('с', 's'), array('т', 't'), array('у', 'u'), array('ф', 'f'),
array('х', 'h'), array('ц', 'c'), array('э', 'e'), array('ь', ''), array('ъ', ''), array('й', 'y'),
array('Э', 'JE'), array('Ё', 'JO'), array('Я', 'YA'), array('Ю', 'YU'), array('Ы', 'Y'), array('Ж', 'ZH'),
array('Й', 'Y'), array('Щ', 'SHCH'), array('Ч', 'CH'), array('Ш', 'SH'), array('Э', 'E'), array('А', 'A'),
array('Б', 'B'), array('В', 'V'), array('Г', 'G'), array('Д', 'D'), array('Е', 'E'), array('З', 'Z'),
array('И', 'I'), array('К', 'K'), array('Л', 'L'), array('М', 'M'), array('Н', 'N'), array('О', 'O'),
array('П', 'P'), array('Р', 'R'), array('С', 'S'), array('Т', 'T'), array('У', 'U'), array('Ф', 'F'),
array('Х', 'H'), array('Ц', 'C'), array('Э', 'E'), array('Ь', ''), array('Ъ', ''), array('Й', 'Y'),
// Make english alphabet full: append english-english pairs
// for symbols which is not used in russian-english
// translations. Used in slugify.
array("c", "c"),
array("q", "q"),
array("y", "y"),
array("x", "x"),
array("w", "w"),
array("1", "1"),
array("2", "2"),
array("3", "3"),
array("4", "4"),
array("5", "5"),
array("6", "6"),
array("7", "7"),
array("8", "8"),
array("9", "9"),
array("0", "0"),
); //Translation table
private static $_RU_ALPHABET;
private static $_EN_ALPHABET;
private static $_ALPHABET;
/**
* "Constructor" for class variables
*/
public static function StaticConstructor()
{
self::$_RU_ALPHABET = array();
self::$_EN_ALPHABET = array();
foreach (self::$_TRANSLATION_TABLE as $pair) {
self::$_RU_ALPHABET[] = $pair[0];
self::$_EN_ALPHABET[] = $pair[1];
}
}
/**
* Translify russian text
* @param string $inString Input string
* @return string Transliterated string
*/
public function translify($inString)
{
return str_replace(self::$_RU_ALPHABET, self::$_EN_ALPHABET, $inString);
}
/**
* Detranslify
* @param string $inString Input string
* @return string Detransliterated string
*/
public function detranslify($inString)
{
return str_replace(self::$_EN_ALPHABET, self::$_RU_ALPHABET, $inString);
}
/**
* Prepare string for slug (i.e. URL or file/dir name)
* @param string $inString Input string
* @param string|null $encoding
* @return string Slug-string
*/
public function slugify($inString, $encoding=null)
{
if ($encoding === null)
$encoding = RUtils::$encoding;
$inString = mb_strtolower($inString, $encoding);
//convert & to "and"
$inString = preg_replace('/(?:&)|&/u' , ' and ', $inString);
// replace spaces by hyphen
$inString = preg_replace('/[-\s\t]+/u', '-', $inString);
$translitString = $this->translify($inString);
return preg_replace('/[^\w-]+/', '', $translitString);
}
}
Translit::StaticConstructor();