• Модуль: 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;
}