[Treść z 04-02-2009 02:29]
Po wstępnym przyjrzeniu się, wygląda na to, że faktycznie ta funkcja przy "wbiciu" wszystkich tagów byłaby idealna.
Tylko właśnie chciałbym tego wklepywania uniknąć.
Ale jeżeli nie ma wyjścia, to to zrobię, w końcu nie jest to niewykonalne.:P
Dzięki.:)
[Dopisane 04-02-2009 14:00]
Zmodyfikowałem tamtą, podaną przez Ciebie, funkcję.
Dodałem usuwanie komentarzy HTML oraz poprawiłem błąd, przez który wszystkie nie zamknięte znaczniki nie były usuwane (a przecież nie każdy tag wymaga zamknięcia, np.
nie ma </br> :-) )
function strip_exists_tags($text, $allowedTags = array())
{
$tags2strip = array('!--.*--', '!DOCTYPE', 'a', 'abbr', 'acronym', 'address', 'applet', 'area', 'b', 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'cite',
'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html', 'i', 'iframe',
'img', 'input', 'ins', 'isindex', 'kbd', 'label', 'legend', 'li', 'link', 'map', 'menu', 'meta', 'noframes', 'noscript', 'object', 'ol', 'optgroup', 'option', 'p', 'param', 'pre', 'q', 's', 'samp', 'script',
'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'tt', 'u', 'ul', 'var');
$args = func_get_args();
$text = array_shift($args);
$allowedTags = func_num_args() > 2 ? array_diff($args,array($text)) : (array)$allowedTags;
foreach ($tags2strip as $tag)
{
if (!in_array($tag, $allowedTags))
while(preg_match('/<\/?'.$tag.'(|\W[^>]*)>/iusU', $text, $found))
$text = str_replace($found[0],$found[2],$text);
}
return preg_replace('/(<\/?('.join('|',$tags2strip).')(|\W.*)\/>)/iusU', '', $text);
}
Jest tylko jeszcze problem, z którym nie mogę sobie poradzić.
Chociaż jeden polski znak w tekscie powoduje zwrócenie pustego rezultatu.
Prawdopodobnie coś jest z tamtymi wyrażeniami, ale nie mogę dojść do tego, w którym miejscu.
Funkcja tak samo się zachowuje, przy znakach: '&' i '#'.
Co jest nie tak? :-/