php preg_replace: mantenga los caracteres especificados + letras en idiomas extranjeros

Necesito una función que elimine todos los caracteres (no listados en el patrón) de la cadena pero que conserva letras en idiomas extranjeros. Sé que preg_replace tiene \ p "patrón" pero no puedo hacerlo funcionar por alguna razón.

Yo uso esta función para eliminar toda la mierda de la cadena:

$main_content=preg_replace("/[^a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these

En pocas palabras, la función debe mantener todas las letras / números estándar y los símbolos estándar como + -! @ # $ Y así sucesivamente, y eliminar toda la basura como © ™ y así sucesivamente. Si hay una forma mejor de escribir preg_replace de la que utilizo, hágamelo saber.

Ahora, quiero que la función mantenga las letras en idiomas extranjeros, así que la modifiqué a

$main_content=preg_replace("/[^\p{L}a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these

(Usted notará \ p {L} añadido). Desafortunadamente, no funcionó como se esperaba. Cuando hago eco del texto, veo que no se eliminaron los idiomas extranjeros (eso es bueno) pero se convirtieron en (eso es malo).

¿Cómo lo arreglo?