-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStringHelper.php
187 lines (174 loc) · 6.17 KB
/
StringHelper.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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
namespace darkfriend\helpers;
/**
* This helper methods for string
* @package darkfriend\helpers
* @author darkfriend <[email protected]>
* @version 1.0.4
*/
class StringHelper
{
/**
* Get encoded string
*
* @param mixed $val
* @return array|string
*/
public static function htmlspecialchars($val)
{
if (\is_array($val)) {
$arrReturn = array();
foreach ($val as $key => $value) {
$arrReturn[$key] = self::htmlspecialchars($value);
}
return $arrReturn;
} else {
if (!empty($val)) {
return \htmlspecialchars(
$val,
\ENT_QUOTES | \ENT_HTML5 | \ENT_DISALLOWED | \ENT_SUBSTITUTE,
'UTF-8'
);
}
}
return '';
}
/**
* Get decoded string
*
* @param mixed $val
* @return array|string
*/
public static function htmlspecialchars_decode($val)
{
if (\is_array($val)) {
$arrReturn = array();
foreach ($val as $key => $value) {
$arrReturn[$key] = self::htmlspecialchars_decode($value);
}
return $arrReturn;
} else {
if ($val) {
return \htmlspecialchars_decode(
$val,
\ENT_QUOTES | \ENT_DISALLOWED | \ENT_SUBSTITUTE
);
}
}
return '';
}
/**
* Get generated string
*
* @param int $length
* @param string $chars
* @return string
*/
public static function generateString($length = 8, $chars = '0123456789abdefghknqrstyzABDEFGHKNQRSTYZ')
{
$numChars = \strlen($chars);
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= \substr($chars, rand(1, $numChars) - 1, 1);
}
return $string;
}
/**
* Return suffix word
* @param int $value число
* @param array $words массив возможных окончаний
* @return string
* @example 5 товаров, 1 товар, 3 товара
*/
public static function getDeclension($value = 1, $words = array('', 'а', 'ов'))
{
$array = array(2, 0, 1, 1, 1, 2);
return $words[($value % 100 > 4 && $value % 100 < 20) ? 2 : $array[($value % 10 < 5) ? $value % 10 : 5]];
}
/**
* Return truncated string to the number of characters specified.
*
* @param string $string The string to truncate.
* @param int $length How many characters from original string to include into truncated string.
* @param string $suffix String to append to the end of truncated string.
* @param string $encoding The charset to use, defaults to charset currently used by application.
* @return string the truncated string.
*/
public static function truncate($string, $length, $suffix = '...', $encoding = null)
{
if ($encoding === null) {
$encoding = 'UTF-8';
}
if (\mb_strlen($string, $encoding) > $length) {
return \rtrim(\mb_substr($string, 0, $length, $encoding)) . $suffix;
}
return $string;
}
/**
* Return truncated string to the number of words specified.
*
* @param string $string The string to truncate.
* @param int $count How many words from original string to include into truncated string.
* @param string $suffix String to append to the end of truncated string.
* @return string the truncated string.
*/
public static function truncateWords($string, $count, $suffix = '...')
{
$words = \preg_split('/(\s+)/u', \trim($string), null, \PREG_SPLIT_DELIM_CAPTURE);
if (\count($words) / 2 > $count) {
return \implode('', \array_slice($words, 0, ($count * 2) - 1)) . $suffix;
}
return $string;
}
/**
* Get translit string
* @param string $str
* @param array $params iso key - array and lower key - boolean
* @return string
*/
public static function translit($str, $params = array())
{
if(!$str) return $str;
if(empty($params['iso'])) {
$iso = array(
"Є"=>"YE","І"=>"I","Ѓ"=>"G","і"=>"i","№"=>"","є"=>"ye","ѓ"=>"g",
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
"Е"=>"E","Ё"=>"YO","Ж"=>"ZH",
"З"=>"Z","И"=>"I","Й"=>"J","К"=>"K","Л"=>"L",
"М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
"С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"X",
"Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
"Ы"=>"Y","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA",
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
"е"=>"e","ё"=>"yo","ж"=>"zh",
"з"=>"z","и"=>"i","й"=>"j","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"x",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
"«"=>"","»"=>"","—"=>"-"," "=>"",
);
}
if(!isset($params['lower'])) {
$params['lower'] = true;
}
return $params['lower'] ? \strtolower(\strtr($str, $params['iso'])) : \strtr($str, $params['iso']);
}
/**
* Add slashes in string
* @param string|string[] $str
* @param array $params
* @return string|string[]
*/
public static function addSlashes($str, $params = array())
{
if(!$str) return $str;
if(!isset($params['search'])) {
$params['search'] = array("\\", "\"", "'");
}
if(!isset($params['replace'])) {
$params['replace'] = array("\\\\", '\\"', "\\'");
}
return \str_replace($params['search'], $params['replace'], $str);
}
}