>  기사  >  백엔드 개발  >  PHP 민감한 단어 필터링 고급 버전

PHP 민감한 단어 필터링 고급 버전

巴扎黑
巴扎黑원래의
2016-11-10 13:34:432064검색

일부 특수 문자를 필터링하는 PHP 프로그램을 소개했습니다. 이제 이 민감한 단어 필터링 기능을 더욱 강력하게 업그레이드해 보겠습니다. 이를 통해 더 이상 민감한 단어 중간에 공백이나 기타 구두점을 추가하는 것을 두려워하지 않아도 됩니다.


사용자가 말할 수 있는 한 광고나 기타 민감한 단어가 나타날 수 있으므로 사이트의 "순수성"을 유지하려면 민감한 단어 필터링 메커니즘을 추가해야 합니다.

필터링 메커니즘: PHP 키워드 정규 일치 추가

//$str은 사용자 데이터입니다
함수 wordFilter($str)
{
/*
민감해지기 단어 목록
민감한 단어 저장 방법:
1: txt 파일에 저장(일반적인 방법)
2: 캐시에 저장(더 나은 방법)
memcachd에 저장합니다.
*/
$words = getSensitiveWords();

foreach($words를 $word로)
{
$preg_letter = '/^[A-Za-z]+ $/';
If (preg_match($preg_letter, $str))
{//중국어 일치
$str = strtolower($str);
$pattern_1 = '/([^A -Za-z]+' . $word . '[^A-Za-z]+)|([^A-Za-z]+' . $word . 's+)|(s+' . $word . ' [^A-Za-z]+)|(^' . $word . '[^A-Za-z]+)|([^A-Za-z]+' . $word.'$)/' ;
        // 민감한 단어는 양쪽 모두 비워두지 마세요
                                                                   = '/ (^' . $word . 's+)|(s+' . $word . 's+)|(s+' . $word . ' $)|(^' . $word . '$)/';
/ / 민감한 단어는 공백으로 묶을 수 있습니다
if (preg_match($pattern_2, $str))
{
$ flag = TRUE;
}
}
else
                           {/ /영어 문자열 일치, 대소문자 구분 없음
$pattern = '/s*' $word .
if (preg_match($pattern, $str))
{
            $flag = TRUE;
예:
민감한 단어: 버클

사용자 처리 후:
버클
버클, 버클
버클 @ 버클
버클 1 버클
이 경우에 따라 일반적인 코드 매칭은 일치하지 않을 수 있습니다.

해결책:

먼저 사용자 데이터에서 모든 구두점과 일부 특수 문자를 제거한 다음 민감한 단어 판단을 수행합니다.

코드:

$flag_arr=array('?','!','엔','(',')',':',''',''' ,'"','"','《','》',',','...',',',',','nbsp',']','[','~' );

           $content_filter=preg_replace('/s/','',preg_replace("/[[:punct:]]/",'',strip_tags(html_entity_decode(str_replace($flag_arr,'') ,$ content),ENT_QUOTES,'UTF-8'))));
$content_filter는 처리된 사용자 데이터이며 wordFilter($content_filter) 필터링 작업을 수행합니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.