Gracias por responder.
Mira, yo cuando programo dejo las fuentes de entrada intactas. Así si por ejemplo recibo un texto por $GET['txt'] lo dejo así.
No hago:
$GET['txt'] = filtro($GET['txt']);
así nunca tendré que revertir un filtro.
sino que creo una nueva referencia:
Por ejemplo para consulta sql
$miconsulta = fprintf("select campo from tabla where n='%s'", antiSQLInjection($GET['txt']));
o para imprimir el valor:
echo antiCrossSiteScripting($GET['txt']);
Aquí he creado otra versión, ahora es más personalizado. por ejemplo si tengo un campo que comienza con _ y aplicaba el filtro para sql anterior, buscando por ejemplo el valor _abc no lo encontraría porque después del filtro quedaba: \_abc
Así, ahora si el texto se usará con un LIKE se pasa el parámetro true.
Similar para el antiCrossSiteScripting.
Si dejaba una variable así:
$texto = '<b>Este es backslas:\\</b>';
y hacia:
echo antiCrossSiteScripting($texto);
imprimía: el texto sin el backslash final.
Ahora, especifico que si el texto no provino de una fuente de entrada, es decir lo creo yo, no le quite los backlashes explícitos que yo escribo.
En un nuevo mensaje dejo el nuevo código, porque lo he modificado varias veces después de postearlo.