'⚡️ локальные группы, ⚡️Больше возможностей• Теперь Вы ⚡️'.substr(3,9)
#Выведет локальные
$text = '⚡️ локальные группы, ⚡️Больше возможностей• Теперь Вы ⚡️ ';
echo grapheme_substr($text, 3, 9);
#Выведет: окальные
echo mb_substr($text, 3, 9);
#Выведет: окальные
function mb_strlen($text)
{
$length = 0;
$textlength = strlen($text);
for ($x = 0; $x < $textlength; $x++) {
$char = ord($text[$x]);
if (($char & 0xC0) != 0x80) {
$length += 1 + ($char >= 0xf0);
}
}
return $length;
}
function mb_substr($text, $offset, $length = null)
{
$mb_text_length = mb_strlen($text);
if ($offset < 0) {
$offset = $mb_text_length + $offset;
}
if ($length < 0) {
$length = ($mb_text_length - $offset) + $length;
} elseif ($length === null) {
$length = $mb_text_length - $offset;
}
$new_text = '';
$current_offset = 0;
$current_length = 0;
$text_length = strlen($text);
for ($x = 0; $x < $text_length; $x++) {
$char = ord($text[$x]);
if (($char & 0xC0) != 0x80) {
$current_offset += 1 + ($char >= 0xf0);
if ($current_offset > $offset) {
$current_length += 1 + ($char >= 0xf0);
}
}
if ($current_offset > $offset) {
if ($current_length <= $length) {
$new_text .= $text[$x];
}
}
}
return $new_text;
}