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 &#60; e &#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( "<$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