desinfectar la cadena usando php de lista blanca php

Quiero desinfectar una $string usando la siguiente lista blanca:

Incluye az, AZ, 0-9 y algunos caracteres habituales incluidos en las publicaciones []=+-¿?¡!$%^&*'"()/#@*,.:;_| .
También acentos españoles como á,é,í,ó,ú y ÁÉÍÓÚ

Lista blanca

 abcdefghijklmnñopqrstuvwxyzñáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ0123456789[]=+-¿?¡!$%^&*'"()/#@*,.:;_| 

Quiero sanear esta cuerda

  $string="//abcdefghijklmnñopqrstuvwxyzñáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ0123456789[]=+-¿?¡!$%^&*'()/#@*,.:;_| |||||||||| ] ¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶¸¹º»¼½ mmmmm onload onclick='' [ ? /  { space !#$%&'()*+,-./:;?@[\]^_`{|}~ sdsd ** *`` `` ´´ {} {}[] ````... ;;,,´'¡'!!!!¿?ña ñaña ÑA á é´´ è ´ 8i ó ú à à` à è`ì`ò ù & > < ksks < wksdsd '' \" \' alert('hi')"; 

Probé esta expresión regular pero no funciona

 //$regex = '/[^\w\[\]\=\+\-\¿\?\¡\!\\$\%\^\&\*\'\"\(\)\/\#\@\*\,\.\/\:\;\_\|]/i'; //preg_replace($regex, '', $string); 

¿Alguien tiene una idea de cómo desinfectar esta cadena de acuerdo con los valores de la lista blanca?

Si conocía los caracteres de la lista blanca, use la lista blanca en la expresión regular en lugar de incluir la lista negra. La lista negra podría ser realmente grande. Especialmente si la encoding algo como UTF-8 o UTF-16

Hay muchas maneras de hacer esto. Uno podría ser crear una expresión regular con grupos de captura del rango de posibilidades deseado (también incluir los espacios y nuevas líneas) y componer una nueva cadena con los grupos.

Además, tome con cuidado que algunos de los caracteres podrían ser caracteres regex reservados y necesitan ser modificados. Como “[? +”

Podrías probar una expresión regular como:

 $string ="Your test string"; $pattern= "([a-zA-Z0-9\[\]=\+\-\¿\?¡!<>$%\^&\*'\"\sñÑáéíóúÁÉÍÓÚ]+)"; preg_match_all($pattern, $string, $matches); $newString = join('', $matches); 

Este es un ejemplo único y simple de cómo aplicar la lista de whilte con la expresión regular.