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?