сменил кодировку сайта на utf-8, заколебался каждый файл открывать, базу тоже сконвертировал, вроде все, можно пить пиво, но тут случилась засада, при чистке строки от гадости русскую букву Р (именно в верхнем регистре) корявит. например строка: Привет, Родина! в результате будет: Привет, [] одина! [] - это квадратик Код (PHP): $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,!?:()№_ ]/iu", "", $string); в чем тут трабла? И почему именно Р ?
а допиши её в регулярку да посмотри что будет. возможно ее нут между А и Я $string = preg_replace("/[^-0-9а-яёА-ЯРЁa-zA-Z.,!?)№_ ]/iu", "", $string);
дописал, результат: п� ивет � одина Добавлено спустя 48 минут 45 секунд: забавно, если делать так Код (PHP): echo preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,!?:()№_ ]/iu", "", "пРивет Родина"); то выводит как надо, а если так Код (PHP): echo filter_check_text($string="пРивет Родина", $atribut="title"); function filter_check_text($string, $atribut){ switch ($atribut){ case "phone" : $string = preg_replace("/[^-0-9(), ]/iu", "", $string); break; case "text" : $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,!?:()№=*+ ]/iu", "", $string); break; case "title" : $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,!?:()№_ ]/iu", "", $string); break; case "login" : $string = preg_replace("/[^-0-9a-zA-Zа-яёА-ЯЁ_ ]/iu", "", $string); break; case "name" : $string = preg_replace("/[^-а-яёА-ЯЁ]/iu", "", $string); break; case "email" : $string = preg_replace("/[^-0-9a-zA-Z@_.]/iu", "", $string); break; case "price" : $string = preg_replace("/[^0-9.]/iu", "", $string); break; case "number" : $string = preg_replace("/[^0-9]/iu", "", $string); break; case "key" : $string = preg_replace("/[^a-zA-Z]/iu", "", $string); break; case "pass" : $string = preg_replace("/[^-0-9a-zA-Z.,!?:_@()=+]/iu", "", $string); break; case "filename" : $string = preg_replace("/[^-0-9a-z._]/iu", "", $string); break; case "" : $string = preg_replace("/[^\w\x7F-\xFF\s]/", " ", $string);// удаляем все "ненормальные" символы } $string = str_replace(chr(160), " ", $string); //Удаляем неразрывные пробелы $string = str_trim(preg_replace("/ +/", " ", $string)); //сжимаем двойные пробелы return $string; } то п� ивет � одина Добавлено спустя 9 минут 28 секунд: chr(160) - это для cp1251 "\xC2\xA0" - это для utf8 всем спасибо =)))
Надо эскейпить последовательности: preg_quote() в помощь, а та проблема что была, скорее всего решилась заменой chr(160) на последовательность юникода. Иными словами он заменял не тот байт на пробел.