Newsgroup: it.comp.www.php
Titolo: Problema con uso di preg_replace

Ciao a tutti, ho un problema strano che non riesco a risolvere.
Devo "pulire" del codice html eliminando le varie classi dei <p> <td> ecc, 
e per fare questo ho usato queste due funzioni
    PHP:
    function removeEvilTags($source){
               $allowedTags='<a><br><b><h1><h2><h3><h4><i>' .
                 '<img><li><ol><p><strong><table>' .
                 '<tr><td><th><u><ul>';
               $source = strip_tags($source, $allowedTags);
               return preg_replace('/<(.*?)>/ie',
               "'<'.removeEvilAttributes('\\1').'>'", $source);
        }
        }
        function removeEvilAttributes($tagSource){
               $stripAttrib = "' (style|class)=\"(.*?)\"'i"; $tagSource =
               stripslashes($tagSource); $tagSource =
               preg_replace($stripAttrib, '', $tagSource); echo
               $tagSource;
            return $tagSource;
        }
e fin qui tutto a posto, ottengo il risultato voluto. Il problema nasce 
quando cerco di inglobare il tutto in un oggetto...ecco la classe:
    PHP:
class ClearHtml{
 
        var $text = '';
 
        function ClearHtml($text=''){
            $this->text = $text;    
        }
 
        function clear(){
            if($this->text != '')
                return $this->removeEvilTags($this->text);
        }
 
        function removeEvilTags($source){
               $allowedTags='<a><br><b><h1><h2><h3><h4><i>' .
                 '<img><li><ol><p><strong><table>' .
                 '<tr><td><th><u><ul>';
               $source = strip_tags($source, $allowedTags);
                   return preg_replace('/<(.*?)>/ie', "'<'.
		   $this->removeEvilAttributes('\1').'>'", $source);
        }
 
        function removeEvilAttributes($tagSource){
            	$stripAttrib = "' (style|class)=\"(.*?)\"'i";
                $tagSource = stripslashes($tagSource);
                $tagSource = preg_replace($stripAttrib, '', $tagSource);
                echo "DENTRO";
                return $tagSource;
        }
 
            function setText($text){
                $this->text = $text;    
            }
 
        }
alla riga di removeEvilTags
    PHP:
    return preg_replace('/<(.*?)>/ie',
    "'<'.$this->removeEvilAttributes('\\1').'>'", $source);
la funzione removeEvilAttributes non viene mai richiamata....
come mai? qualche idea? cosa mi sfugge?
grazie!! roby.

 		   $this->removeEvilAttributes('\1').'>'", $source);
                                           ^^^^^
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

                                            ^^^^^
eheh no, ho copiato tutto da un mio post su un forum e il \\ me lo
sostituiva con \. L'ho modificato quasi dappertutto evidentemente!
scusate....roby

 sostituiva con \. L'ho modificato quasi dappertutto evidentemente!
Perche' non usi preg_replace_callback, mi sembra piu' indicata per la
situazione?


 situazione?
ma guarda, il modo di riuscire ad aggirare il problema l'ho trovato. Però
mi chiedevo il motivo per il quale usando due funzioni non ho problemi,
mentre "inglobando" il tutto all'interno di una classe questa non
si comporta secondo le mie aspettative. In particolar modo sembra non
sostituire mai \\1 con i vari tag.

 grazie!! roby.
perdona la domanda forse banale ma perche' non usi..
http://php.net/strip_tags
-- 
www.iuz-lab.info



perchè non deve togliermi tutti i tag, ma solo qualcuni, e deve
mantenerne altri però togliendo le classi che hanno al loro
interno...sarebbe stato bello fosse bastato! 
:)

Roberto Druetto wrote:

scusami ma in effetti non avevo letto tutto il thread, scusa ancora..
-- 
www.iuz-lab.info