Добавить u
к регулярному выражению, чтобы включить многобайтовый режим Unicode PCRE:
$value = preg_replace("/[^\w]/u", '', $value);
Следствие
В режиме Unicode PCRE ожидает, что все является многобайтовым, и если его нет, то будет проблемы с соблюдением сроков. Поэтому, чтобы преобразовать что-либо в UTF-8 (и удалить любой необратимый мусор), мы сначала используем:
$value = iconv( 'ISO-8859-1', 'UTF-8//IGNORE//TRANSLIT', $i );
для очистки и подготовки ввода.
Поскольку все может быть закодировано в ISO-8859-1 (даже если некоторые непонятные символы отображаются неправильно), и так как большинство веб-браузеров работают в 8859 изначально (если не сказано использовать UTF-8), мы нашли эту функцию общий, безопасный и эффективный метод «взять что-нибудь, отбросить мусор и конвертировать в UTF-8».
mb_ereg_ * устарела с версии 5.3.0 - поэтому использование этих функций не является правильным способом.