Причина в том, что когда стриппер находит <
, следующий за непробельным символом, он предполагает, что он находится внутри тега. Затем внутри тега, если он видит кавычку, он устанавливает флаг (in_q
), а затем ищет закрывающую пару. Если он находит закрывающую пару, он сбрасывает флаг in_q
(in_q = 0;
), но если он не находит его, он предполагает, что он все еще находится в кавычках, и потребляет все до конца и удаляет его из выход.
Если у вас есть такие уродливые теги во входной строке, вам лучше вместо этого использовать регулярные выражения:
preg_replace('~<\S[^<>]*>~', '', $str);
Смотрите демо здесь