Symfony\Polyfill\Mbstring
Mbstring::mb_convert_encoding
Метод класса: Mbstring{}
Хуков нет.
Возвращает
null. Ничего (null).
Использование
$result = Mbstring::mb_convert_encoding( $s, $toEncoding, $fromEncoding );
- $s(обязательный)
- .
- $toEncoding(обязательный)
- .
- $fromEncoding
- .
По умолчанию:null
Код Mbstring::mb_convert_encoding() Mbstring::mb convert encoding CF7 6.2.4.1
public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
{
if (\is_string($fromEncoding) && 2 < \strlen($fromEncoding) && '"' === $fromEncoding[0] && '"' === $fromEncoding[-1]) {
$fromEncoding = substr($fromEncoding, 1, -1);
}
if (80000 <= \PHP_VERSION_ID
&& (!isset(self::$convertibleEncodings[$toEncoding]) || (null !== $fromEncoding && !(\is_string($fromEncoding) && isset(self::$convertibleEncodings[$fromEncoding]))))
&& null !== $error = self::getConversionError('mb_convert_encoding', 2, $toEncoding, $fromEncoding)
) {
throw new \ValueError($error);
}
if (\is_array($s)) {
return self::convertArray($s, $toEncoding, $fromEncoding);
}
if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) {
$fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
} else {
$fromEncoding = self::getEncoding($fromEncoding);
}
$toEncoding = self::getEncoding($toEncoding);
if ('BASE64' === $fromEncoding) {
$s = base64_decode($s);
$fromEncoding = $toEncoding;
}
if ('BASE64' === $toEncoding) {
return base64_encode($s);
}
if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
$fromEncoding = 'Windows-1252';
}
if ('UTF-8' !== $fromEncoding) {
$s = self::iconv($fromEncoding, 'UTF-8', $s);
} elseif (!preg_match('//u', $s)) {
$s = self::scrubUtf8($s);
}
return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s);
}
if ('HTML-ENTITIES' === $fromEncoding) {
$decodeControlChars = static function ($m) {
$code = '' !== ($m[2] ?? '') ? hexdec($m[2]) : (int) $m[1];
if ($code < 32 || 127 === $code) {
return \chr($code);
}
if (128 <= $code && $code <= 159) {
return "\xC2".\chr(0x80 | ($code & 0x3F));
}
return $m[0];
};
if (\PHP_VERSION_ID >= 70400) {
$s = html_entity_decode($s, \ENT_QUOTES, 'UTF-8');
// html_entity_decode() leaves numeric entities for C0/C1 control
// characters as-is (HTML spec), but mb_convert_encoding() decodes
// them. Catch what html_entity_decode() missed.
if (false !== strpos($s, '&#')) {
$s = preg_replace_callback('/&#(?:0*([0-9]++)|[xX]0*([0-9a-fA-F]++));/', $decodeControlChars, $s);
}
} else {
// PHP < 7.4: html_entity_decode() truncates strings at NUL bytes,
// so decode the control character entities first then call
// html_entity_decode() on each NUL-delimited chunk independently.
$s = preg_replace_callback('/&#(?:0*([0-9]++)|[xX]0*([0-9a-fA-F]++));/', $decodeControlChars, $s);
$s = implode("\0", array_map(static function ($chunk) {
return html_entity_decode($chunk, \ENT_QUOTES, 'UTF-8');
}, explode("\0", $s)));
}
$fromEncoding = 'UTF-8';
}
if ('UTF-8' === $fromEncoding && !preg_match('//u', $s)) {
$s = self::scrubUtf8($s);
}
return self::iconv($fromEncoding, $toEncoding, $s);
}