php preg_replace - zachowaj określone znaki + litery w języku obcym
Potrzebuję funkcji, która usuwa wszystkie znaki (niewymienione we wzorze) z łańcucha, ale zachowuje litery w języku obcym. Wiem, że preg_replace ma „wzorzec”, ale z jakiegoś powodu nie mogę go uruchomić.
Używam tej funkcji, aby usunąć wszystkie bzdury z łańcucha:
$main_content=preg_replace("/[^a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these
Mówiąc prościej, funkcja powinna zachować wszystkie standardowe litery / cyfry i standardowe symbole, takie jak + -! @ # $ I tak dalej, i usunąć wszystkie bzdury, takie jak © ™ i tak dalej. Jeśli jest lepszy sposób na napisanie takiego preg_replace niż używam, daj mi znać.
Teraz chcę, aby funkcja zachowywała litery w językach obcych, więc zmodyfikowałem je
$main_content=preg_replace("/[^\p{L}a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these
(Zauważysz, że dodano {L}). Niestety nie zadziałało zgodnie z oczekiwaniami. Kiedy powtarzam tekst, widzę, że języki obce nie zostały usunięte (to dobrze), ale zostały przekonwertowane na (to źle).
Jak to naprawić?