TextModeration.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php namespace App\Servers\Safe;
  2. /**
  3. * 文本内容安全
  4. *
  5. */
  6. class TextModeration{
  7. /**
  8. * 获取配置
  9. *
  10. * @param Array $config 配置项
  11. *
  12. */
  13. public function getConfig(){
  14. // 链式操作
  15. return $this->config;
  16. }
  17. /**
  18. * 本地检测
  19. *
  20. * @param String $content 检测内容
  21. *
  22. */
  23. public function localCheck($content){
  24. // 结果
  25. $result = ['suggestion'=>'Pass','keywords'=>[]];
  26. // 组合路径
  27. $file = resource_path('js').'/sensitive_words.json';
  28. // 返回结果
  29. if( !file_exists($file) ) return $result;
  30. // 如果存在文件
  31. $file = file_get_contents($file);
  32. // 解析数据库
  33. $stop = json_decode($file,true);
  34. // 返回结果
  35. if( !$stop ) return $result;
  36. // 如果是字符串
  37. if( !is_array($stop) ) return $result;
  38. // 如果没有文件
  39. foreach ($stop as $value) {
  40. // 没有字符
  41. if( empty($value['words']) ) continue;
  42. // 返回结果
  43. if( stripos('$'.$content,$value['words']) > 0 ) {
  44. $result['suggestion'] = 'Local';
  45. $result['keywords'][] = $value['words'];
  46. }
  47. }
  48. // 返回结果
  49. return $result;
  50. }
  51. /**
  52. * @param String $content 检测内容
  53. *
  54. *
  55. */
  56. public function textModeration($content){
  57. try {
  58. // 替换
  59. $content = str_ireplace([' ',';',':','-','=','+','*','^','%','#','@','!','~','`','(',')','?','/','&',';',',','"',"'",'<','>','.','[',']','|',"\\",'{','}'],'',$content);
  60. // 如果是空字符串
  61. if( !$content ) return ['suggestion'=>'Empty','keywords'=>[]];
  62. // 先检测本地的
  63. $result = $this->localCheck($content);
  64. // 错误
  65. if ( $result['suggestion'] != 'Pass' ) return $result;
  66. // 返回结果
  67. return $result;
  68. }catch(TencentCloudSDKException $e) {
  69. // 如果错误
  70. return ['error'=>$e->getMessage()];
  71. }
  72. }
  73. }