我如何在此表单函数中添加坏词过滤器(如果存在坏词,则不会提交)

How can i add Bad word filter in this form function (if bad word exist it wont submit)

这是我试过的脚本,它工作并发出警报,但最后提交了表单,如果文本区域中存在错误的词,我想停止。表单不应该被提交,人们会得到警报功能。我正在使用 CODEIGNITOR 框架。

脚本:

<script type="text/javascript">
var swear_words_arr=new Array("fuck","kill","ugly");

var swear_alert_arr=new Array;
var swear_alert_count=0;
function reset_alert_count()
{
 swear_alert_count=0;
}
function validate_text()
{
 reset_alert_count();
 var compare_text=document.form1.msg_text.value;
 for(var i=0; i<swear_words_arr.length; i++)
 {
  for(var j=0; j<(compare_text.length); j++)
  {
   if(swear_words_arr[i]==compare_text.substring(j,(j+swear_words_arr[i].length)).toLowerCase())
   {
    swear_alert_arr[swear_alert_count]=compare_text.substring(j,(j+swear_words_arr[i].length));
    swear_alert_count++;
   }
  }
 }
 var alert_text="";
 for(var k=1; k<=swear_alert_count; k++)
 {
  alert_text+="\n" + "(" + k + ")  " + swear_alert_arr[k-1];
 }
 if(swear_alert_count>0)
 {
  alert("The message will not be sent!!!\nThe following illegal words were found:\n_______________________________\n" + alert_text + "\n_______________________________");
  document.form1.msg_text.select();
 }
 else
 {
  document.form1.submit();
 }
}
function select_area()
{
 document.form1.msg_text.select();
}
window.onload=reset_alert_count;
    </script>

是否可以在 php 函数中转换它。

模型函数:

    public function create_msg($msg_text, $user_id){

        $data = array(
            'msg_text' => $msg_text,
            'user_id' => $user_id
        );

        if( $this->db->insert('swall_message', $data) ){
            return true;
        }else{
            return false;
        }
   }

文本区域代码:

 <form action="<?php echo base_url('user/'.$user->user_uid);?>" method="POST" name="form1">
   
   

<div class="form-group">



    <textarea name="msg_text" onClick="select_area()" cols="30"  class="form-control" rows="5" minlength="1" maxlength="5000" required=""></textarea>
    
    
    
    
    <input type="hidden" name="user_id" value="<?php echo $user->user_id;?>">
</div>
 <div class="col-12">
                                    <label class="custom-label"><?php if(isset($msg)) echo $msg;?></label>
                                </div>



<button type="submit" onClick="validate_text();" class="btn btn-block text-uppercase">submit</button>
</form>

var swear_words_arr=new Array("fuck","kill","ugly");

function validate_text(event){
const text = document.getElementById("text").value;
console.log(text); // if you see the console, the form submit is stopped.
if(swear_words_arr.indexOf(text) !== -1){
  event.preventDefault();
  event.stopPropagation();
  return false;
}

return true;

}
Try to insert return before the function and use stopPropagation


<form>
<input type="text" name="text" id="text">
<button type="submit" onClick="return validate_text(event);" class="btn btn-block text-uppercase">submit</button>
</form>

在php代码中过滤数据

此代码未经测试。参考 here

<?php

$msg_text = 'fuck';
 $data = array(
            'msg_text' => $msg_text,
            'user_id' => $user_id
        );
$swear_words_arr=array("fuck","kill","ugly");

if(in_array($data['msg_text'], $swear_words_arr)){
    echo "failed";
    return false;

}

// else this is true. your db code below

echo "passed";

return true;

?>