<?php
$name="trlen не любит кириллицу. Так что mb_strlen() и не помешает $word=preg_replace('![^\w\d\s]*!ui','',$word); Ну я код писал не проверяя) Отладка то 80% времени как раз и занимает)";
$name1 = preg_replace("#([^-0-9a-zа-яё_!'&\$@%\s\*\.]*)#i", '', $name);
$name2 = preg_replace("#([^-0-9A-Za-zа-яА-ЯёЁ_!'&\$@%\s\*\.]*)#i", '', $name);
$name3 = preg_replace("#([^-0-9A-Za-zа-яА-ЯёЁ_!'&\$@%\s\*\.]*)#ui", '', $name);
$name4 = preg_replace("#([^-0-9A-Za-zа-ЯёЁ_!'&\$@%\s\*\.]*)#i", '', $name);
$name5 = preg_replace("#([^-A-Za-zйцукенгшщзхъфывапролджэячсмитьбюйЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁ_!\s\.]*)#i", '', $name);
header('Content-Type: text/html; charset=utf-8');
echo $name1."<hr>";
echo $name2."<hr>";
echo $name3."<hr>";
echo $name4."<hr>";
echo $name5."<hr>";