단어 필터링 검색 소스좀 봐주세요..

단어 필터링 검색 소스좀 봐주세요..

QA

단어 필터링 검색 소스좀 봐주세요..

본문


<?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

<?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] 문자열은 금지어입니다.";

}​

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,600 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT