채택완료

문장 속에 스팸 단어있으면 종료되게 하는 소스 도움 부탁드려요.

2020-04-02 (목) 02:09:01 1,571

$msg   = trim($_POST['msg']);

위와 같이 $msg 변수에 메세지 내용을 받아온 경우

예를 들어서

메세지 내용 중 qwer123 이라는 글자가 있을 경우

"스팸입니다" 라는 문구를 출력하고 더 이상 코드 실행을 하지않고

종료되게 하려면 어떻게 코딩해야할까요?

왕초보라서 활용을 못하겠네요 ㅎ

대충 아래와 같은 방식으로 할려고하는데요.

아래 if 문에서 $msg 변수 다음에 어떻게 대입식을 넣어야할지를 모르겠네요

$msg   = trim($_POST['msg']);

if ($msg *****) {
  $result_json[JSON_MESSAGE_NAME] = "스팸입니다.";
  toJson($result_json);
  exit();
 }

도움 좀 부탁드립니다.

|

답변 2개 / 댓글 2개

채택된 답변
+20 포인트
Copy
$spam_word = 'qwer123';

$msg   = trim($_POST['msg']);

$pos = stripos($msg,$spam_word);

if ($pos !== false) {
  $result_json[JSON_MESSAGE_NAME] = "스팸입니다.";
  toJson($result_json);
  exit();
 }

stripos($aaa,$b)  $aaa 문자열에서 $b 단어를 찾음

존재하면 시작하는 위치를 숫자로(int) 반환

없으면 false (boolean 형) 으로 반환

그리고 false 비교시 데이터 형까지 비교하는 === 나 !=== 를 이용 할 것

단순히 == 나 != 로 비교하면 0 이 반환된다면 false 로 인식하여 

의도와 다르게 동작 할 수 있음

stripos 함수는 대소문자 구분하지 않음 구분하려면 strpos 사용

답변에 대한 댓글 1개

2020-04-02 (목) 20:55:36
대단히 감사합니다.
정말 간결하고 이해하기 쉽게 알려주셔서 큰 도움되었습니다.
제가 운영하는 앱과 연동하는 서버 파일에 한번 적용시켜서 사용해보아야겠네요.
다시 한번 감사합니다. ^^

bbs\ajax.filter.php 파일에 소스 참조하세요.

게시판에 스팸 차단하는 소스 입니다.

Copy
//$filter = explode(",", strtolower(trim($config['cf_filter'])));

// strtolower 에 의한 한글 변형으로 아래 코드로 대체 (곱슬최씨님이 알려 주셨습니다.)

$filter = explode(",", trim($config['cf_filter']));

for ($i=0; $i<count($filter); $i++) {

    $str = $filter[$i];

 

    // 제목 필터링 (찾으면 중지)

    $subj = "";

    $pos = stripos($subject, $str);

    if ($pos !== false) {

        $subj = $str;

        break;

    }

 

    // 내용 필터링 (찾으면 중지)

    $cont = "";

    $pos = stripos($content, $str);

    if ($pos !== false) {

        $cont = $str;

        break;

    }

}

답변에 대한 댓글 1개

2020-04-02 (목) 11:59:17
답변 감사합니다만. 제가 응용하려는 것과는 매칭이 안될듯 하군요.
1,
앞부분 소스 내용이 없으므로 $config['cf_filter'] 이 배열 변수값이 어떻게 얻어지는지는
모르겠으나. DB에 저장된 필터링용 단어 문장을 불러와 저장하는 변수겠죠?

2,
for ($i=0; $i<count($filter); $i++) 이 것은 필터링용 단어 모음 문장 길이만큼
$i 값을 증가 시키는 순환 문이죠?
참고로 제가 PHP 문외한 이라서 소스를 구하고자 질문 드렸던 거고요.
다음과 같은 코드를 이해하지 못합니다.
$str = $filter[$i]; 이런 코드의 경우
$str 변수에 $filter 배열 변수의 $i 번째 배열의 데이터를 저장하라는 것 정도로만
인지할 뿐. $str 변수에 어떤 데이터가 저장되게되는지 조차 모르는 1인입니다.

3,
$pos = stripos($subject, $str); 이 코드 자체를 이해 못하므로
$pos 값이 참이면 실행 중지하라는 것 자체를 이해 못하겠네요.

PHP를 90% 이상 모르는 사람이니 쬐끔한 이해해주시고 도움 주시면 감사하겠네요.
예를 들어
$aaa 라는 변수에 "이;ㅁㄴ러니;얾니;러ㅣ;ㄴ멀니 qwer123 sdjfldas" 라는
문장이 저장되있을 경우 이 문장에서 qwer123 이라는 글자가 있는지 없는지
확인하여 있다면
break; 또는 exit(); 명령으로 실행 중지를 시키는 아주 단순한 소스코드를 원합니다.
그리고
qwer123 과 같은 필터링 단어 역시 DB에서 불러오는 방식이 아니라.
PHP 문서에 직접 넣어서 대입하는 초간단 방식을 사용하려고합니다.

도움 주시면 감사할께요^^

답변을 작성하려면 로그인이 필요합니다.