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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta