$stringa = preg_replace("/[^a-zA-Z0-9_-\s\.\"\']/", " ", $value)
Se inserisco gli escape come mi fai notare, il codce semprebbe giusto,
ma se vado ad eseguarlo la stringa diventa vuota.
A me serveirebbe come scrivevo un replace di qualsiasi carattere che non sia tra quelli indicati (lettere, numeri, spazi, punti, apici, trattini)
non posso andare nello specifico perchè non so quali caratteri speciali potrei avere da esaminare.