Preg_replace только слова буквы и цифры

Когда речь идет об обработке текста, добавляемого на сайт посетителем, срабатывает принцип: лучше меньше да лучше.
Можно стараться отловить «плохие» символы в тексте , а можно строго обозначить только разрешенные символы.
Сегодня будет справляться с задачей: оставить в тексте только буквы (складывающиеся в слова) и цифры. Используем для этого функцию preg_replace(), функцию обработки строки по правилам регулярных выражений:
<?
/* во-первых, сама строка , до обработки */
$str = "1. Добро пожаловать, или посторонним вход воспрещен! 2. Welcome or go away, leave me alone!";
/* во-вторых, обработка строки */
$str = preg_replace('/[^0-9а-яА-ЯёЁA-Za-z ]/','',$str);
/* и вывод результата */
echo $str; // 1 Добро пожаловать или посторонним вход воспрещен 2 Welcome or go away leave me alone
/* остались только латинские буквы, цифры, кириллица и пробелы */
?>

Да и зачем указывать диапазон букв а-яА-ЯёЁA-Za-z когда есть \w для обозначения в регулярных выражениях любого символа образующего слово. Может просто сделать так:
$str = preg_replace('/[^\s\d\w]/','',$str);
/* \d - любая десятичная цифра, \s - любой пробельный символ */

Вроде всё ясно , но что если язык посетителя отличается от английского и русского? Когда Вы указываете в регулярном выражении \w символы обрабатываются с учетом локализации, а на русскоязычных серверах local обычно cp1251. В этой случае, специфические буквы, присущие испанскому, французскому или немецким языкам, будут вырезаны. Например пропадут буквы: ä , ß, ö.
В этом случае резонно использовать флаг \u после квадратных скобок. Он обозначает кодировку UTF юникод и в таком случае из иноземных слов буквы не выпадут:
<?
$str = «Der Östliche Kaiseradler (Aquila heliaca) ist eine Vogelart aus der Familie der Habicht­artigen (Accipitridae). Das Verbreitungs­gebiet dieses großen Vertreters der Unter­familie Aquilinae reicht vom südöstlichen Mittel­europa nach Osten bis China.»;
$str = preg_replace(‘/[^0-9а-яА-ЯёЁA-Za-z ]/’,»,$str);
echo $str; // результатом работы скрипта станет немецкий текст без точек и скобок: Der Östliche Kaiseradler Aquila heliaca ist eine Vogelart aus der Familie der Habicht­artigen Accipitridae Das Verbreitungs­gebiet dieses großen ……
?>

Опубликовано 10.10.2014 в 17:31 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: PHP программирование · Теги: , , , , , , ,