WWW.ZEOS.IN 1 161 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 (изменено) test.zeos.in Версия DataLife Engine: 9.5 Тип лицензии скрипта: Неактивированная копия Режим работы сайта: Включен Операционная система: Linux 2.6.32.12 Версия PHP: 5.3.10 Версия MySQL: 5.1.49 MySQLi Информация о GD: GD Version: bundled (2.0.34 compatible), FreeType Support: Enabled, FreeType Linkage: with freetype, T1Lib Support: Disabled, GIF Read Support: Enabled, GIF Create Support: Enabled, JPEG Support: Enabled, PNG Support: Enabled, WBMP Support: Enabled, XPM Support: Disabled, XBM Support: Enabled, JIS-mapped Japanese Font Support: Disabled, Module mod_rewrite Включен Безопасный режим: Выключен Выделено оперативной памяти: 128M Отключенные функции: Неопределено Максимальный размер загружаемого файла: 32 Mb Размер свободного места на диске: 774.31 Gb Не совсем корректно работает функция "Фильтр слов" Текст для примера Текст авто текст Текст авто. текст Текст авто авто текст Текст "авто" текст автомобиль автомобиль текст Текст автомобиль Текст автомобиль текст Текст автомобиль. Настройки фильтра Введите слово: авто заменить на: трактор Тип замены: Точное совпадение слова С учетом регистра: Нет Область поиска: Везде Действие: Произвести замену слова Результат Текст авто текст Текст трактор. текст Текст трактор авто текст Текст "авто" текст автомобиль автомобиль текст Текст автомобиль Текст автомобиль текст Текст автомобиль. Другие настройки фильтра Введите слово: авто заменить на: трактор Тип замены: Любое вхождение С учетом регистра: Нет Область поиска: Везде Действие: Произвести замену слова Результат Текст трактор текст Текст трактор. текст Текст трактор трактор текст Текст "трактор" текст трактормобиль трактормобиль текст Текст трактормобиль Текст трактормобиль текст Текст трактормобиль. То, что выделено красным, мне кажется, обработано неправильно. Изменено 15 марта 2012 пользователем WWW.ZEOS.IN Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 082 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 Проверил на тестовом сервере первый вариант. Текст трактор текст Текст трактор. текст Текст трактор трактор текст Текст "трактор" текст автомобиль автомобиль текст Текст автомобиль Текст автомобиль текст Текст автомобиль. Замена прошла корректно и правильно. Что то у вас с локалями для PHP проблема. Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 (изменено) Автор Владимир, у меня заработало правильно, когда я в parse.class заменил строчку: $find_text = "#(^|b|s|<br />)" . preg_quote( $word_arr[1], "#" ) . "(b|!|?|.|,|$)#".$register; на $find_text = "#(^|b|s|<br />)" . preg_quote( $word_arr[1], "#" ) . "(b|s|!|?|.|,|$)#".$register; (s - Соответствует любому пробельному символу. Эквивалентно [ fnrtv]) В результате я получил: Текст трактор текст Текст трактор. текст Текст трактор трактор текст Текст "авто" текст автомобиль автомобиль текст Текст автомобиль Текст автомобиль текст Текст автомобиль А вот почему в Вашем примере обработало еще и эту строчку: Текст "авто" текст я не понимаю. Ведь слово авто в кавычках, а значит это уже не точное совпадение и заменяться должно лишь при Любое вхождение Может я что-то путаю Добавлено позже: В моём первом сообщении, где я выделил красным цветом слова авто, как-раз и не происходила замена, так как именно в этих примерах это было слово с пробелом. И не являлось словом с точкой в конце или с границей в конце слова - автоb Изменено 15 марта 2012 пользователем WWW.ZEOS.IN Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 082 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 WWW.ZEOS.IN, Странно, у меня работает и без этой замены. Возможно как то связано с версиями PHP, я проверяю на последней версии 5.3.x, проверю на других версиях. Текст "авто" текст Это тоже должно заменяться слово является отдельным и законченным, только заключенным в кавычки. Здесь срабатывать должен b Цитата Ссылка на сообщение Поделиться на других сайтах
Captain 624 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 ZEOS, у меня нормально прошла замена без правок. PHP 5.2.17_6 Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 Автор Я у себя проверяю на версии: 5.3.10, а увидел эту проблему, когда мой клиент сказал, что у него это тоже не работает. У него версия: 5.2.6-1+lenny13 Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 Автор return print_r( $find_text ); #(^|\b|\s|\<br \/\>)авто(\b|!|\?|\.|,|$)#i #(^|\b|\s|\<br \/\>)авто(\b|!|\?|\.|,|$)#i return print_r( $source ); Array ( [0] => Текст авто текст [1] => [2] => < [3] => br / [4] => > [5] => Текст авто. текст [6] => [7] => < [8] => br / [9] => > [10] => Текст авто [11] => [12] => < [13] => br / [14] => > [15] => авто текст [16] => [17] => < [18] => br / [19] => > [20] => Текст \"авто\" текст [21] => [22] => < [23] => br / [24] => > [25] => автомобиль [26] => [27] => < [28] => br / [29] => > [30] => автомобиль текст [31] => [32] => < [33] => br / [34] => > [35] => Текст автомобиль [36] => [37] => < [38] => br / [39] => > [40] => Текст автомобиль текст [41] => [42] => < [43] => br / [44] => > [45] => Текст автомобиль. ) Array ( [0] => 1 ) <?php $find = "#(^|\b|\s|\)авто(\b|!|\?|\.|,|$)#i"; $replace = "\\1<!--filter:" . "авто" . "-->" . "трактор" . "<!--/filter-->\\2"; $source = "Текст авто текст"; echo preg_replace( $find, $replace, $source ); ?> Возвращает: Текст авто текст <?php $find = "#(^|\b|\s|\)авто(\b|!|\?|\.|,|$)#i"; $replace = "\\1<!--filter:" . "авто" . "-->" . "трактор" . "<!--/filter-->\\2"; $source = "Текст авто"; echo preg_replace( $find, $replace, $source ); ?> Возвращает: Текст трактор <?php $find = "#(^|\b|\s|\)авто(\b|!|\?|\.|,|$)#i"; $replace = "\\1<!--filter:" . "авто" . "-->" . "трактор" . "<!--/filter-->\\2"; $source = "Текст \"авто\" текст"; echo preg_replace( $find, $replace, $source ); ?> Возвращает: Текст "авто" текст Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 (изменено) Автор echo preg_replace( "#\bавто\b#", "good", "Текст авто текст" ); echo "<br />\n"; echo preg_replace( "#\bavto\b#", "good", "Text avto text" ); echo "<br />\n"; echo preg_replace( "#\b2222\b#", "good", "1111 2222 3333" ); У меня выводит: Текст авто текст Text good text 1111 good 3333 На нормально настроенных серверах выводит: Текст good текст Text good text 1111 good 3333 Проблема действительно у меня Такая ошибка, как у меня, я вижу есть на многих хостингах. Вдруг кому-то понадобится! Решение проблемы: в файле /engine/classes/parse.class.php найти строчку: $find_text = "#(^|\b|\s|\<br \/\>)" . preg_quote( $word_arr[1], "#" ) . "(\b|!|\?|\.|,|$)#".$register; заменить на: $find_text = "#(^|[^a-zA-Zа-яА-ЯёЁ]|\s|\<br \/\>)" . preg_quote( $word_arr[1], "#" ) . "([^a-zA-Zа-яА-ЯёЁ]|!|\?|\.|,|$)#".$register; Изменено 15 марта 2012 пользователем WWW.ZEOS.IN Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 082 Опубликовано: 15 марта 2012 Рассказать Опубликовано: 15 марта 2012 WWW.ZEOS.IN, Скорее всего то что я сказал в самом начале, не установлены локали кирилицы для PHP Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 16 марта 2012 Рассказать Опубликовано: 16 марта 2012 Автор Скорее всего то что я сказал в самом начале, не установлены локали кирилицы для PHPТак и есть Но не все виртуальные хостинги позволяют менять локаль через setlocale(...) Вот очень интересная статья: http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/ тут написано, как это исправили в WordPress с использованием классов символов Unicode echo preg_replace( "#bавтоb#", "good", "Текст авто текст" ); echo "<br />n"; echo preg_replace( "#(PL|A)авто(PL|Z)#", "1good2", "Текст авто текст" ); Текст авто текст Текст good текст Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.