단어 필터링 검색 소스좀 봐주세요..
본문
<?php
$filter = explode(",", trim($config['cf_filter']));
for ($i=0; $i<count($filter); $i++) {
$str = $filter[$i]; // 필터단어의 앞뒤 공백을 없앰
$pos = stripos($search, $str);
if ($pos !== false) {
?>
<p><em>'<?php echo $search ?>'</em> 는 금지 단어 필터에 의해 차단되어있습니다.</p>
<ul>
<li><em>'<?php echo $str ?>'</em> 란 단어는 금지단어 필터에 추가된 단어 입니다.</li>
<li>잘못 등록된 차단 단어 필터가 있을경우 홈페이지 관리자에게 문의 바랍니다.</li>
<li>총 등록된 금지단어 필터 <em>'<?php echo count($filter) ?>'</em>건</li>
</ul>
<?php
break;
}
}
?>
이렇게 소스를 짰으며.. 기본적인 그누보드5 단어 필터를 쓰고있는데 첫번째 단어필터 만작동 하고 나머진 작동 자체를 안하는데 도아주세요 ㅜ_ㅜ..
!-->답변 3
break;
<?php
$filter = '금지어1,금지어2,금지어3';
$filter = str_replace("," , "|" , $filter); // 정규식을 사용하기 위해 콤마를 | 로 바꿈
$search = '금지어1을 쓰고 금지어3도 써보자!';
if (preg_match_all('/('.$filter.')/', $search, $match) == true) {
?>
금지어에 걸렸습니다.
금지어에 걸린 단어들은 아래와 같습니다.
<?php
for ($i=0, $loop=count($match[0]); $i<$loop; $i++) {
echo $match[0][$i].'<br>';
}
}
?>
위와 같이 하면 아래와 같이 나옵니다.
금지어에 걸렸습니다.
금지어에 걸린 단어들은 아래와 같습니다.
금지어1
금지어3
필터단어가 금지어1, 금지어2, 금지어3 이렇게 콤마뒤에 스페이스 같은게 있지 않나요?
$str
=
$filter
[
$i
];
// 필터단어의 앞뒤 공백을 없앰
이렇게 주석을 하신것을 보아 왠지 그런것 같은데...
$str
= trim(
$filter
[
$i
]);
// 필터단어의 앞뒤 공백을 없앰
실제로 함수를 적어주셔야 하는것이 아닌지....
그리고 이런건 이왕이면 정규식으로 해주면 좋습니다.
$config
[
'cf_filter'
] = '안녕1,안녕2,안녕3';
if (preg_match('/('.str_replace(',','|',$config
[
'cf_filter'
]
).'/',$search,$match) == true) {
echo "$search 문자열 중에 $match[1] 문자열은 금지어입니다.";
}