- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/text/utfsafestring.php
- Класс: BitrixMainTextUtfSafeString
- Вызов: UtfSafeString::rtrimInvalidUtf
static function rtrimInvalidUtf($string)
{
//valid UTF-8 octet sequences
//0xxxxxxx
//110xxxxx 10xxxxxx
//1110xxxx 10xxxxxx 10xxxxxx
//11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
$last4bytes = substr($string, -3);
$reversed = array_reverse(unpack("C*", $last4bytes));
if (($reversed[0] & 0x80) === 0x00) //ASCII
return $string;
elseif (($reversed[0] & 0xC0) === 0xC0) //Start of utf seq (cut it!)
return substr($string, 0, -1);
elseif (($reversed[1] & 0xE0) === 0xE0) //Start of utf seq (longer than 2 bytes)
return substr($string, 0, -2);
elseif (($reversed[2] & 0xE0) === 0xF0) //Start of utf seq (longer than 3 bytes)
return substr($string, 0, -3);
return $string;
}