Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317

    Rimuovere tutti i tag php con una regex

    Premetto che non sono molto bravo con le regex.

    Ho scritto una regex in php per rimuovere tutti i tag php:
    Codice PHP:
    <?php
        
    function remove_php_tags$content )
        {
            return 
    preg_replace( array( "#<%|%>#" "#<\?|\?>#" "#<script\s+language\s*=\s*('|\")php('|\")\s*>#" ) , "" $content );
        }
    ?>
    Ed avrei due curiosità:
    - E' sicura questa regex o può essere bypassata?
    - E se io volessi sostituire i tag < e > con &amp;#60; e &amp;#62; senza però sostituire anche i tag normali ( tipo <html>[b][i] etc... ) ?

    Sto facendo mille prove documentandomi un pò dappertutto ( compreso php.net e il manule ufficiale http://it2.php.net/manual/en/function.preg-replace.php ) ma non essendo molto pratico...


    ---- EDIT ----

    Okkei, cell'ho fatta a farne un pezzo :P
    Codice PHP:
    <?php
        
    function replace$p )
        {
            return 
    preg_replace(
                array( 
    "#<(\?)#si" "#<(%)#si" "#<(script\s+language\s*=\s*['\"]\s*php\s*['\"]\s*>)#si" ) ,
                array( 
    "<$1" ) ,
                
    $p
            
    );
        }
    ?>
    Rimangono tre problemi:
    - Mi serve selezionare anche tutta la parte che può essere contenuta dai tag php.
    - Mi serve che vengono sostituiti i tag finali SOLO se ci sono.
    - La 3° regex "#<(script\s+language\s*=\s*['\"]\s*php\s*['\"]\s*>)#si" non mi funziona...

    Ora continuo a smanettare ancora un pò...

    ---- EDIT N° 2 ----

    Ho capito il primo problema... avevo inserito array( "&#60;$1" ) nelle stringhe da modificare e giustamente mi editava sola la prima regex. Ora la regex:

    Codice PHP:
    <?php
        
    function replace$p )
        {
            return 
    preg_replace(
                array( 
    "#<(\?)#si" "#<(%)#si" "#<(script\s+language\s*=\s*['|\"]\s*php\s*['\"]\s*>)#si" ) ,
                
    "<$1" ,
                
    $p
            
    );
        }
    ?>
    Funziona... ora dovrei selezionare tutto ciò che segue i tag <?|<%|<script language="php">...
    Rimettiamoci a smanettare

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Bene o male il problema dei tag l'ho risolto.

    Senza che apro un'altro topic:
    sto scrivendo una "mini" classe per i template, solo che la regex non funziona molta bene in quanto estrae più dati del necessario. Posto il tutto.


    template.php
    Codice PHP:
    <?php

    class tpl
    {
        function 
    tpl$p )
        {
            
    $this->page file_get_contents"tpl/$p.tpl" );
            
    $this->page $this->compile$this->page );
        }
        
        function 
    compile$p )
        {
            
    $regex  "/";
            
    $regex .= "(<#\\s*foreach\\s*direct\\s*=\\s*'(.*)'\\s*#>)";
            
    $regex .= "/is";
            
            
    $return preg_split$regex $p , -PREG_SPLIT_DELIM_CAPTURE PREG_SPLIT_NO_EMPTY );
            
            
    $code "";
            
            while ( 
    $html array_shift$return ) )
            {
                
                if ( 
    preg_match"/(<#\\s*foreach\\s*direct\\s*=\\s*'(.*?)'\\s*#>)/is" $html $r ) )
                {
                    
    $code .= "\n <?php foreach ( /**/ ) { \n";
                }
                
                else
                {
                    
    $code .= $html;
                }
            }
            
            echo 
    $code;
        }
    }

    $a = new tpl"lol" );

    ?>
    tpl/lol.tpl
    codice:
    1<#foreach direct='asd'#>
    Output:
    codice:
    1
     <?php foreach (  ) { 
    asd
    Perchè mi stampa anche asd ? Come evito che stampi la variabile all'interno di direct='' nell'output?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.