Попробуйте что-то вроде этого
function cutText($inputText, $start, $length) {
$temp = $inputText;
$res = array();
while (strpos($temp, '>')) {
$ts = strpos($temp, '<');
$te = strpos($temp, '>');
if ($ts > 0) $res[] = substr($temp, 0, $ts);
$res[] = substr($temp, $ts, $te - $ts + 1);
$temp = substr($temp, $te + 1, strlen($temp) - $te);
}
if ($temp != '') $res[] = $temp;
$pointer = 0;
$end = $start + $length - 1;
foreach ($res as &$part) {
if (substr($part, 0, 1) != '<') {
$l = strlen($part);
$p1 = $pointer;
$p2 = $pointer + $l - 1;
$partx = "";
if ($start <= $p1 && $end >= $p2) $partx = "";
else {
if ($start > $p1 && $start <= $p2) $partx .= substr($part, 0, $start-$pointer);
if ($end >= $p1 && $end < $p2) $partx .= substr($part, $end-$pointer+1, $l-$end+$pointer);
if ($partx == "") $partx = $part;
}
$part = $partx;
$pointer += $l;
}
}
return join('', $res);
}
Параметры:
- $ inputText - ввод текста
- $ start - позиция первого символа
- $ length - как символы меню мы хотим удалить
Пример # 1 - удаление первых 3 символов
$text = 'Test <span><a>something</a> something else</span>.';
$text = cutText($text, 0, 3);
var_dump($text);
Вывод (убрано "Tes")
string(47) "t <span><a>something</a> something else</span>."
Удаление первых 10 символов
$text = cutText($text, 0, 10);
Вывод (удалено «Test somet»)
string(40) "<span><a>hing</a> something else</span>."
Пример 2 - Удаление внутренних символов - "es" из "Test"
$text = cutText($text, 1, 2);
выход
string(48) "Tt <span><a>something</a> something else</span>."
Удаление "вещь, что-то эль"
$text = cutText($text, 9, 18);
выход
string(32) "Test <span><a>some</a>se</span>."
Надеюсь, это поможет.
Ну, может быть, это не лучшее решение, но это все, что я могу сделать на данный момент.