Bitrix-D7 22.2
Загрузка...
Поиск...
Не найдено
Класс Encoding

Открытые статические члены

static convertEncoding ($data, $charsetFrom, $charsetTo)
 
static convertEncodingArray ($data, $charsetFrom, $charsetTo)
 
static convertEncodingToCurrent ($string)
 
static convertToUtf ($string)
 
static detectUtf8 ($string, $replaceHex=true)
 

Защищенные статические члены

static resolveAlias ($alias)
 
static convert ($data, $charsetFrom, $charsetTo)
 
static getCurrentEncoding ()
 
static convertByMbstring ($data, $charsetFrom, $charsetTo)
 

Подробное описание

См. определение в файле encoding.php строка 7

Методы

◆ convert()

static convert (   $data,
  $charsetFrom,
  $charsetTo 
)
staticprotected

См. определение в файле encoding.php строка 74

75 {
76 if (is_array($data) || $data instanceof \SplFixedArray)
77 {
78 //let's do a recursion
79 if ($data instanceof \SplFixedArray)
80 {
81 $result = clone $data;
82 }
83 else
84 {
85 $result = [];
86 }
87 foreach ($data as $key => $value)
88 {
89 $newKey = self::convert($key, $charsetFrom, $charsetTo);
90 $newValue = self::convert($value, $charsetFrom, $charsetTo);
91
92 $result[$newKey] = $newValue;
93 }
94 return $result;
95 }
96 elseif (is_string($data))
97 {
98 if ($data == '')
99 {
100 return '';
101 }
102 return static::convertByMbstring($data, $charsetFrom, $charsetTo);
103 }
104 return $data;
105 }
static convert($data, $charsetFrom, $charsetTo)
Definition: encoding.php:74

◆ convertByMbstring()

static convertByMbstring (   $data,
  $charsetFrom,
  $charsetTo 
)
staticprotected

См. определение в файле encoding.php строка 254

255 {
256 //For UTF-16 we have to detect the order of bytes
257 //Default for mbstring extension is Big endian
258 //Little endian have to pointed explicitly
259 if (strtoupper($charsetFrom) == "UTF-16")
260 {
261 $ch = substr($data, 0, 1);
262 if ($ch == "\xFF" && substr($data, 1, 1) == "\xFE")
263 {
264 //If Little endian found - cutoff BOF bytes and point mbstring to this fact explicitly
265 $res = mb_convert_encoding(substr($data, 2), $charsetTo, "UTF-16LE");
266 }
267 elseif ($ch == "\xFE" && substr($data, 1, 1) == "\xFF")
268 {
269 //If it is Big endian, just remove BOF bytes
270 $res = mb_convert_encoding(substr($data, 2), $charsetTo, $charsetFrom);
271 }
272 else
273 {
274 //Otherwise, assime Little endian without BOF
275 $res = mb_convert_encoding($data, $charsetTo, "UTF-16LE");
276 }
277 }
278 else
279 {
280 $res = mb_convert_encoding($data, $charsetTo, $charsetFrom);
281 }
282
283 return $res;
284 }

◆ convertEncoding()

static convertEncoding (   $data,
  $charsetFrom,
  $charsetTo 
)
static

Converts data from a source encoding to a target encoding.

Аргументы
string | array | \SplFixedArray$dataThe data to convert. From main 16.0.10 data can be an array.
string$charsetFromThe source encoding.
string$charsetToThe target encoding.
Возвращает
string|array|\SplFixedArray|bool Returns converted data or false on error.

См. определение в файле encoding.php строка 17

18 {
19 $charsetFrom = static::resolveAlias($charsetFrom);
20 $charsetTo = static::resolveAlias($charsetTo);
21
22 if ((string)$charsetFrom == '' || (string)$charsetTo == '')
23 {
24 // incorrect encoding
25 return $data;
26 }
27
28 if (strcasecmp($charsetFrom, $charsetTo) == 0)
29 {
30 // no need to convert
31 return $data;
32 }
33
34 try
35 {
36 // mb_encoding_aliases emits an E_WARNING level error if encoding is unknown
37 if (@mb_encoding_aliases($charsetFrom) === false || @mb_encoding_aliases($charsetTo) === false)
38 {
39 // unknown encoding
40 return $data;
41 }
42 }
43 catch(\ValueError $e)
44 {
45 return $data;
46 }
47
48 return self::convert($data, $charsetFrom, $charsetTo);
49 }

◆ convertEncodingArray()

static convertEncodingArray (   $data,
  $charsetFrom,
  $charsetTo 
)
static
Уст.:
Deprecated in main 16.0.10. Use Encoding::convertEncoding().
Аргументы
$data
$charsetFrom
$charsetTo
Возвращает
string|array|\SplFixedArray|bool

См. определение в файле encoding.php строка 114

115 {
116 return self::convertEncoding($data, $charsetFrom, $charsetTo);
117 }
static convertEncoding($data, $charsetFrom, $charsetTo)
Definition: encoding.php:17

◆ convertEncodingToCurrent()

static convertEncodingToCurrent (   $string)
static
Аргументы
string$string
Возвращает
bool|string

См. определение в файле encoding.php строка 123

124 {
125 $isUtf8String = self::detectUtf8($string);
126 $isUtf8Config = Application::isUtfMode();
127
128 $from = '';
129 $to = '';
130 if ($isUtf8Config && !$isUtf8String)
131 {
132 $from = static::getCurrentEncoding();
133 $to = 'UTF-8';
134 }
135 elseif (!$isUtf8Config && $isUtf8String)
136 {
137 $from = 'UTF-8';
138 $to = static::getCurrentEncoding();
139 }
140
141 if ($from !== $to)
142 {
143 $string = self::convertEncoding($string, $from, $to);
144 }
145
146 return $string;
147 }
static detectUtf8($string, $replaceHex=true)
Definition: encoding.php:208

◆ convertToUtf()

static convertToUtf (   $string)
static
Аргументы
string$string
Возвращает
bool|string

См. определение в файле encoding.php строка 153

154 {
155 if (self::detectUtf8($string))
156 {
157 return $string;
158 }
159
160 $from = '';
161 $to = '';
163 {
164 $from = static::getCurrentEncoding();
165 $to = 'UTF-8';
166 }
167
168 if ($from !== $to)
169 {
170 $string = self::convertEncoding($string, $from, $to);
171 }
172
173 return $string;
174 }

◆ detectUtf8()

static detectUtf8 (   $string,
  $replaceHex = true 
)
static
Аргументы
string$string
bool$replaceHex
Возвращает
bool

См. определение в файле encoding.php строка 208

209 {
210 //http://mail.nl.linux.org/linux-utf8/1999-09/msg00110.html
211
212 if ($replaceHex)
213 {
214 $string = preg_replace_callback(
215 "/(%)([\\dA-F]{2})/i",
216 function ($match) {
217 return chr(hexdec($match[2]));
218 },
219 $string
220 );
221 }
222
223 //valid UTF-8 octet sequences
224 //0xxxxxxx
225 //110xxxxx 10xxxxxx
226 //1110xxxx 10xxxxxx 10xxxxxx
227 //11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
228
229 $prevBits8and7 = 0;
230 $isUtf = 0;
231 foreach (unpack("C*", $string) as $byte)
232 {
233 $hiBits8and7 = $byte & 0xC0;
234 if ($hiBits8and7 == 0x80)
235 {
236 if ($prevBits8and7 == 0xC0)
237 {
238 $isUtf++;
239 }
240 elseif (($prevBits8and7 & 0x80) == 0x00)
241 {
242 $isUtf--;
243 }
244 }
245 elseif ($prevBits8and7 == 0xC0)
246 {
247 $isUtf--;
248 }
249 $prevBits8and7 = $hiBits8and7;
250 }
251 return ($isUtf > 0);
252 }

◆ getCurrentEncoding()

static getCurrentEncoding ( )
staticprotected

См. определение в файле encoding.php строка 176

176 : string
177 {
178 $currentCharset = null;
179
180 $context = Application::getInstance()->getContext();
181 if ($context != null)
182 {
183 $culture = $context->getCulture();
184 if ($culture != null)
185 {
186 $currentCharset = $culture->getCharset();
187 }
188 }
189
190 if ($currentCharset == null)
191 {
192 $currentCharset = Configuration::getValue("default_charset");
193 }
194
195 if ($currentCharset == null)
196 {
197 $currentCharset = "Windows-1251";
198 }
199
200 return $currentCharset;
201 }

◆ resolveAlias()

static resolveAlias (   $alias)
staticprotected

См. определение в файле encoding.php строка 51

52 {
53 static $map = array(
54 'csksc56011987' => 'euc-kr',
55 'ks_c_5601-1987' => 'euc-kr',
56 'ks_c_5601-1989' => 'euc-kr',
57 'ksc5601' => 'euc-kr',
58 'ksc_5601' => 'euc-kr',
59 'windows-1257' => 'ISO-8859-13',
60 );
61
62 if(is_string($alias))
63 {
64 $alias = strtolower(trim($alias));
65 if(isset($map[$alias]))
66 {
67 return $map[$alias];
68 }
69 }
70
71 return $alias;
72 }

Объявления и описания членов класса находятся в файле: