korvin0
моська
Потестируйте, пожалуйста, функцию
Программисты! Прошу вас протестировать приведенную ниже функцию на функциональность, т.е. проверить, нет ли случаев, которые она обрабатывает некорректно.
Программисты! Прошу вас протестировать приведенную ниже функцию на функциональность, т.е. проверить, нет ли случаев, которые она обрабатывает некорректно.
PHP:
/*
string ktag_replace(string text[, string replace[,int php]])
Удаляет все теги, стили, яваскрипты, комментарии или заменяет их
на строку [i]replace[/i], если она указана 2-ым параметром.
Если необязательный параметр [i]php[/i]==1, то удаляются также
php-вставки <? ... ?>
*/
function ktag_replace($text,$replace=" ",$php=0) {
$text=str_replace(">",">".$replace,$text);
if ($php==1) {
$text=str_replace("<?=","<?",$text);
$tokens = token_get_all($text);
$text="";
$tmp=0;
foreach ($tokens as $token) {
if ($token[0]==T_OPEN_TAG) $tmp=1;
if ($tmp===0) $text.=$token[1];
if ($token[0]==T_CLOSE_TAG) $tmp=0;
}
}
if (preg_match("/<script(?:[^>]*?(\'|\").*?\\1)*.*?>/i",$text,$matches) && (!strstr($text,"<!--") || strpos($text,$matches[0])<strpos($text,"<!--"))) $tmp=1;
elseif (strstr($text,"<!--")) $tmp=2;
else $tmp=0;
for ($i=0;$i<2;$i++) {
if (($tmp==1 && $i==0) || ($tmp==2 && $i==1)) $text=preg_replace("/<script(?:[^>]*?(\'|\").*?\\1)*.*?>(?:.*?((\'|\").*?\\3|\/\*.*?\*\/|\/\/.*?\n|<!\-\-.*?\-\->))*.*?(<\/script>|$)/is","",$text);
if (($tmp==1 && $i==1) || ($tmp==2 && $i==0)) {
if (strpos($text,"-->",strstr($text,"<!--"))!==false) $text=preg_replace("/<!\-\-.*?\-\->/is","",$text);
else $text=preg_replace("/<!\-\-.*?>/is","",$text);
}
}
$text=preg_replace("/<style(?:[^>]*?(\'|\").*?\\1)*.*?>.*?<\/style>/is","",$text);
$text=preg_replace("/<([^>]*?=\s*(\'|\").*?\\2)+.*?>/s","",$text);
$text=preg_replace("/<([^>=]*?(\'|\").*?\\2)+.*?>/s","",$text);
$text=strip_tags($text);
$text=str_replace(">".$replace,">",$text);
if ($text==="") $text=$replace;
return $text;
}