Web-сшробка
аРикопьНыО форум: Service Pack
V
Дмитрий aka E rror ГАВРИЛЮК
После моей статьи «ПРикольНый фоРум» (МК, N° 31330))
я
получил некоторое количество откликов
разного содержания. В основном это были реплики типа «А можно ведь и так» или «Вот бы такую
фичу вставить». Попробую ответить на некоторые вопросы. Желающие могут скачать исходник:
h ttp://error-design.narod.ru/m k/php_forum .zip ,
5 Кб
ч
«А можно ведь о т а к »
В
последнем отрывке кода было написано $ fo = fo p e n ("fo -
r u m . lis t " , "w ")- Я его так открыл для чтения только за-
тем, чтобы показать, что любая ошибка при открытии фай-
ла может быть обнаружена и предана гласности, так что
после тега < /form > на главной странице могут быть оставлены
лишь такие строчки:
<?
in c lu d e ( f o r u m . lis t ) ;
?>
Конечный результат не меняется, а код короче. Дальше,
заменим в странице обработки данных f_ r o b o t.p h p скрипт
на JavaS cript, который нас перебрасывал на страницу с фо-
румом обратно, на аналогичный, но уже на РНР. О н выгля-
дит следующим образом:
h e a d e r(" L o c a tio n : fo ru m .p h p " );
Этим мы отгораживаемся от вечной проблемы веб дизай-
нера «а что, если скрипты отключены.
..»
«Dom бы т а к д т фичу встав и ть.
..»
К «фичам» отнесем фильтр всяких там слов и смайлики. Прин-
цип работы фильтра таков: мы получаем сообщение посетителя
в переменную $ te x t, как и в прошлый раз, и заменяем все эк-
земпляры ненормативной лексики на [censored] .
Эй, ты [CENSORED] © ! И ке влом тебе [CENSORED]b этот [CENSORED]
РНР?? В твои то годы© !! Это же [CENSORED] полнейшая©! И н е надо мне
тут отнекиваться, ато запушу сейчас в тебя [CENSORED]
! ! ! Ладно, шучу ©
Замена подстрок в строках на РНР произ-
водится с помощью функции e re g _ re p la c e
( s tr in g , n e w _ s trin g , s o u rc e _ s trin g ), где
s tr in g — строка, которую мы меняем, new
s tr in g — на которую меняем, ну а source_
s tr in g — главная жертва всех репрессий, в
ней происходит вся эта потасовка. Есть еще
почти аналогичная функция e re g i_ re p la c e ( ),
только она, в отличие от первой, не чувствительна к регистру. Ею
мы и воспользуемся, так как не думаю, что вам будет приятно,
если вас пошлют с большой буквы, а это не отфильтруется ©.
Для демонстрации создадим массив $ s e n s o re [] и впи-
шем туда всякие каверзные словечки:
$ c e n s o re [ 0 ] = "к у з д р а ";
$ c e n s o re [ 1 ] = "к у д р я ч и т ";
Т А Б Л И Ц А
[0][0]
[0][1]
[0][2]
[0][3]
[1][0]
[1][2]
[1][3]
[2][0]
й [1 ]
[2][2]
[2][3]
[3][0]
[3][1]
[3][2]
[3][3]
$cen sore[2 ]="бокренок";
$cen sore[3 ]="глюкий";
$cen sore[4]="тупой твердый предмет" ; //создали массив
fo r ($ i= 0 ;$ i< 5 ;$ i+ + ){
$text=eregi_replace($censore[$i], "[CENSORED]", $text);//за-
меняем все варианты слов на [CENSORED] с помощью цикла
}
Вставим этот фрагмент кода перед формированием со-
общения в переменную $message. Вот, собственно, и на-
фильтровали.
Теперь перейдем к смайлам. Для начала раздобудем несколь-
ко картиночек, которые будут выполнять эту ответственную роль.
Создадим папку s m ile и посадим туда все эти картинки.
Далее после предыдущего кода фильтра вводим следую-
щие строки:
$ sm ile[О] [0 ]= " :: a n g ry ::
$sm ile[0] [l]="<im g src= 'sm ile/ an gry.gif ' border=0>";
$ sm ile[1 ] [ 0 ] = " : :c o o l:
$ s m ile [l] [1] ="<img s rc = 's m ile / c o o l.g if ' border=0>";
$ s m ile [2 ][0 ]= " : :tongu e:
$sm ile[2] [l]="<im g src='sm ile/ton gu e.gif ' border=0>";
$ sm ile[ 3 ][0 ]= " : :wink:
$sm ile[3 ] [l]= "< im g s rc = 's m ile / w in k .g if ' border=0>";
$ sm ile[ 4 ][0 ]= " : :bom b::
$ sm ile[4 ] [1] ="<img s rc = ' smile/bomb. g i f ' border=
0>"; //создали матричный массив
fo r($ z= 0 ; $z<5; $ z+ + ){
$text=ereg_replace($sm ile[$z] [0 ], $smile[$z] [1 ], $ text);
//заменяем все теги смайлов на теги их картинок
)
Тут мы сотворили матричный массив. Так называ-
ют массив, в котором в каждом элементе содержит-
ся еще один массив. То есть получается эффект шах-
матной доски (или любой другой таблицы). Проиллю-
стрируем это так, как показано в таблице
То есть, в вышеприведенном коде мы созда-
ли с помощью массива таблицу с двумя столб-
цами и пятью строками.
Для замены строки на смайл используется уже функция
ereg_rep la ce(),
так как здесь мы точно знаем, что регистр бу-
дет правильный. Для вставки достаточно где-то рядом с полем
ввода вставить картинки и подписать, что их следует вставить в
текст (в нашем случае
: :angry: : , : :c o o l: : , : :wink: :
и Т.д.)
для отображения соответствующих картинок.
Стоило бы добавить фильтр против ис-
пользования HTML-тегов, РНР, других скрип-
тов, просто заменяя < и > на t i t ; и & g t;
соответственно. НО ! Главное — проделать
эти операции ПЕРЕД вставкой смайлов, так
как в ином случае вместо заветных м ор-
даш ек вы увидите лишь тег типа <im g
s rc = ' sm i 1 е / sm i lenam e . g i f ' b o rd e r=0 >
И еще один момент. Специально в тек-
стовых эквивалентах смайлов, то есть в тех
самых : : c o o l : : было выбрано двоеточие,
а не треугольная скобка, так как в случае
добавления фильтра от скриптов мы так-
же рискуем потерять смайл. Разумеется,
^
запрет распространяется лишь на < и >.
№ 9 /3 36 28 февраля-07 марта 2005
предыдущая страница 38 Мой Компьютер 2005 09 читать онлайн следующая страница 40 Мой Компьютер 2005 09 читать онлайн Домой Выключить/включить текст