본문이 비어있는 스팸 트랙백을 차단해버리기

오늘 무슨 날이군요. 알파벳으로만 되어 있는 영문 트랙백이 잔뜩 달렸습니다. 이상한 점은, 제가 영어중환자 플러그인을 설치하고 있었거든요. 그런데도 트랙백이 걸리더란 말입니다.

그래서 보니, 통과된 스팸 트랙백은 “본문이 없고 제목만 있다”는 점을 발견했습니다.
영어중환자 플러그인을 보니 이렇게 되어 있더군요.

function EnglishPatient_AddingTrackback($target, $mother) {
    return !preg_match('/^[\x{00}-\x{7F}]+$/u', $mother['excerpt']);
}

붉은 글자 부분이 패턴(정규식)입니다. 즉, 트랙백의 본문글에서 전부 영문인지 체크해서, True가 되면 전부 영어니까, 그걸 !로 뒤집어서 반환하는 것입니다. 알고리즘은 훌륭하지만 비어있으면 False로 처리되니까 !로 뒤집혀서 True. 트랙백이 통과되어 버리는 단점이 있죠.

제 취향대로 고쳐버렸습니다.

function EnglishPatient_AddingTrackback($target, $mother) {
    return preg_match('/[xA1-xFE][xA1-xFE]/', $mother['excerpt']);
}

preg_match 앞에 !를 떼어버리고, 정규식을 한글이 들어있는지 체크하는걸로 바꿨습니다.

이걸로 해결될려나요.

ps.

휴지통에 들어간 스팸 트랙백수. 계속 증가중…

ps.

좀더 정교한 한글 매칭 정규식
/[x{1100}-x{11ff}x{3130}-x{318f}x{ac00}-x{d7af}]+/u
다만 유니코드에서만 적용됨.