Мне нужна функция, которая удаляет все символы (не перечислены в шаблоне) из строки, но сохраняет буквы на иностранном языке. Я знаю, что preg_replace имеет \ p "шаблон", но я не могу заставить его работать по какой-то причине.
Я использую эту функцию, чтобы удалить все дерьмо из строки:
$main_content=preg_replace("/[^a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these
Проще говоря, функция должна содержать все стандартные буквы / цифры и стандартные символы, такие как + -! @ # $ И т. Д., И удалять все дерьмо как © ™ и т. Д. Если есть лучший способ написать такой preg_replace, чем я использую, пожалуйста, дайте мне знать.
Теперь я хочу, чтобы функция сохраняла буквы на иностранных языках, поэтому я изменил ее на
$main_content=preg_replace("/[^\p{L}a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these
(Вы заметите, что \ p {L} добавлен). К сожалению, это не сработало, как ожидалось. Когда я повторяю текст, я вижу, что иностранные языки не были удалены (это хорошо), но они были преобразованы в (это плохо).
Как это исправить?
\ p {L} доступен только с модификатором u:
$main_content=preg_replace("/[^\p{L}]/u", "", $main_content);
Обратите внимание, что u добавлен после /