Перейти к публикации

Рекомендованные сообщения

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

Не совсем корректно работает функция "Фильтр слов"

Текст для примера

Текст авто текст

Текст авто. текст

Текст авто

авто текст

Текст "авто" текст

автомобиль

автомобиль текст

Текст автомобиль

Текст автомобиль текст

Текст автомобиль.


Настройки фильтра

Введите слово: авто

заменить на: трактор

Тип замены: Точное совпадение слова

С учетом регистра: Нет

Область поиска: Везде

Действие: Произвести замену слова

Результат

Текст авто текст

Текст трактор. текст

Текст трактор

авто текст

Текст "авто" текст

автомобиль

автомобиль текст

Текст автомобиль

Текст автомобиль текст

Текст автомобиль.


Другие настройки фильтра

Введите слово: авто

заменить на: трактор

Тип замены: Любое вхождение

С учетом регистра: Нет

Область поиска: Везде

Действие: Произвести замену слова

Результат

Текст трактор текст

Текст трактор. текст

Текст трактор

трактор текст

Текст "трактор" текст

трактормобиль

трактормобиль текст

Текст трактормобиль

Текст трактормобиль текст

Текст трактормобиль.


То, что выделено красным, мне кажется, обработано неправильно.

Изменено пользователем WWW.ZEOS.IN
Ссылка на сообщение
Поделиться на других сайтах

Проверил на тестовом сервере первый вариант.

Текст трактор текст

Текст трактор. текст

Текст трактор

трактор текст

Текст "трактор" текст

автомобиль

автомобиль текст

Текст автомобиль

Текст автомобиль текст

Текст автомобиль.

Замена прошла корректно и правильно. Что то у вас с локалями для PHP проблема.

Ссылка на сообщение
Поделиться на других сайтах

Владимир, у меня заработало правильно, когда я в 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])

В результате я получил:

Текст трактор текст

Текст трактор. текст

Текст трактор

трактор текст

Текст "авто" текст

автомобиль

автомобиль текст

Текст автомобиль

Текст автомобиль текст

Текст автомобиль

А вот почему в Вашем примере обработало еще и эту строчку:

Текст "авто" текст

я не понимаю. Ведь слово авто в кавычках, а значит это уже не точное совпадение и заменяться должно лишь при Любое вхождение

Может я что-то путаю 008.gif

Добавлено позже:

В моём первом сообщении, где я выделил красным цветом слова авто, как-раз и не происходила замена, так как именно в этих примерах это было слово с пробелом. И не являлось словом с точкой в конце или с границей в конце слова - автоb

Изменено пользователем WWW.ZEOS.IN
Ссылка на сообщение
Поделиться на других сайтах

WWW.ZEOS.IN,

Странно, у меня работает и без этой замены. Возможно как то связано с версиями PHP, я проверяю на последней версии 5.3.x, проверю на других версиях.

Текст "авто" текст

Это тоже должно заменяться слово является отдельным и законченным, только заключенным в кавычки. Здесь срабатывать должен b

Ссылка на сообщение
Поделиться на других сайтах

Я у себя проверяю на версии: 5.3.10, а увидел эту проблему, когда мой клиент сказал, что у него это тоже не работает. У него версия: 5.2.6-1+lenny13

Ссылка на сообщение
Поделиться на других сайтах


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 );

?>

Возвращает:

Текст "авто" текст

Ссылка на сообщение
Поделиться на других сайтах


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;

Изменено пользователем WWW.ZEOS.IN
Ссылка на сообщение
Поделиться на других сайтах

WWW.ZEOS.IN,

Скорее всего то что я сказал в самом начале, не установлены локали кирилицы для PHP

Ссылка на сообщение
Поделиться на других сайтах

Скорее всего то что я сказал в самом начале, не установлены локали кирилицы для 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 текст

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...