[php] help congdongjava chúng ta code kiểm tra từ xấu, spam

JackV

Administrator
Staff member
Hiện tại JackV đã sửa code chống post từ xấu và spam cho forum mình thành dạng không phân biệt hoa thường và chỉ cần chuỗi có cụm từ hoặc từ trong danh sách sẽ bị khóa, ví dụ danh sách từ khóa là

dangtin
con cac
cho de
thì gặp vấn đề là ta có thể lock những domain dạng dichvudangtin, dangtinraovat, nhưng đối với những từ trao đổi bình thường nó cũng lock luôn
vậy còn cách nào khác không
bị lock từ còn các vì không có dấu thì như nhau mặc dù còn các nằm trong từ còn cách.
connguoi va concho deu la sub class
bị lock vì có chuỗi cho de

Code đang dùng là
PHP:
foreach ($blackList as $value)
            if(strpos($str, $value) > 0)
                  //throw exception
Giờ mình muốn là sẽ kiểm tra nếu trong $value có chứa khoảng trắng thì sẽ kiểm tra dãy ký tự bị phát hiện có phải chỉ gồm các ký tự trong $value ghép lại không hay là còn có thêm ký tự khác nữa.
ví dụ
  • Con mèo và con chó đều là vật nuôi > Không block vì chó đề nằm trong chuỗi của chó đều
  • Vậy còn cách nào khác không > Không block vì còn các nằm trong chuỗi của còn cách
Viết như thế này mà không được
Code:
        foreach ($blackList as $value)
        {
            $loca = strpos($str, $value);
            $block = true;
            if($loca > 0)
            {
                $pos1 = $loca - 1;
                $pos2 = $loca + strlen($value);
                if ($str{$pos1} == ' ' && $str{$pos2} == ' ')
                {
                    $block = false;
                }
                if ($block == true)
                    //DO BLOCK
$blackList danh sách black list
$value từ bị khóa
$pos1 vị trí trước từ bị khóa
$pos2 vị trí sau từ bị khóa

khởi tạo $block = true; rồi khi kiểm tra
PHP:
if ($str{$pos1} == ' ' && $str{$pos2} == ' ')
thì $block = flase nhưng if ($block == true) luôn DO BLOCK, vậy có vấn đề gì ở việc kiểm tra nhỉ. Trước dòng code kiểm tra đã chắc chắn $str{$pos1} và $str{$pos2} trả về hai khoảng trắng.
 
  • Like
Reactions: tranhuyvc