Intereting Posts
Как я могу работать с датами до 1900 года в PHP? Загрузите несколько файлов в CodeIgniter Кнопка WooCommerce Plus / Minus в корзине показывает с перерывами Как сохранить две базы данных MySQL в синхронизации? Мягкое удаление Каскадирование с помощью Laravel 5.2 Как проверить совпадения между двумя массивами с foreach в ларавельном лезвии? Laravel правильно определяет компоновку по умолчанию от контроллера Как обращаться с выходом пользователя в браузере с несколькими вкладками? автоматический выход из системы всех открытых вкладок при выходе из одного из них Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет mysqli_stmt, boolean задан в Как я могу использовать идентификатор ввода Box от PHP до JavaScript? Временная загрузка файла PHP не действительна Ресурс изображения Нужна оптимизация MySQL для комплексного поиска по структурированным данным EAV Исключения PHP, обработанные обработчиком ошибок, не попадают в обработчик исключений Постоянное соединение или объединение пулов в PHP54 + Nginx + PHPFPM + MongoDB Должен ли я разрешать 'allow_url_fopen' в PHP?

php preg_replace – сохранить указанные символы + буквы иностранного языка

Мне нужна функция, которая удаляет все символы (не перечислены в шаблоне) из строки, но сохраняет буквы на иностранном языке. Я знаю, что 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 добавлен после /