cache_censor.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: cache_censor.php 36347 2017-01-13 01:17:50Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. function build_cache_censor() {
  12. $banned = $mod = array();
  13. $bannednum = $modnum = 0;
  14. $data = array('filter' => array(), 'banned' => array(), 'mod' => array());
  15. foreach(C::t('common_word')->fetch_all() as $censor) {
  16. if(preg_match('/^\/(.+?)\/$/', $censor['find'], $a)) {
  17. switch($censor['replacement']) {
  18. case '{BANNED}':
  19. $data['banned'][] = $censor['find'];
  20. break;
  21. case '{MOD}':
  22. $data['mod'][] = $censor['find'];
  23. break;
  24. default:
  25. $data['filter']['find'][] = $censor['find'];
  26. $data['filter']['replace'][] = preg_replace("/\((\d+)\)/", "\\\\1", $censor['replacement']);
  27. break;
  28. }
  29. } else {
  30. $censor['find'] = preg_replace("/\\\{(\d+)\\\}/", ".{0,\\1}", preg_quote($censor['find'], '/'));
  31. switch($censor['replacement']) {
  32. case '{BANNED}':
  33. $banned[] = $censor['find'];
  34. $bannednum ++;
  35. if($bannednum == 1000) {
  36. $data['banned'][] = '/('.implode('|', $banned).')/i';
  37. $banned = array();
  38. $bannednum = 0;
  39. }
  40. break;
  41. case '{MOD}':
  42. $mod[] = $censor['find'];
  43. $modnum ++;
  44. if($modnum == 1000) {
  45. $data['mod'][] = '/('.implode('|', $mod).')/i';
  46. $mod = array();
  47. $modnum = 0;
  48. }
  49. break;
  50. default:
  51. $data['filter']['find'][] = '/'.$censor['find'].'/i';
  52. $data['filter']['replace'][] = $censor['replacement'];
  53. break;
  54. }
  55. }
  56. }
  57. if($banned) {
  58. $data['banned'][] = '/('.implode('|', $banned).')/i';
  59. }
  60. if($mod) {
  61. $data['mod'][] = '/('.implode('|', $mod).')/i';
  62. }
  63. if(!empty($data['filter'])) {
  64. $temp = str_repeat('o', 7); $l = strlen($temp);
  65. $data['filter']['find'][] = str_rot13('/1q9q78n7p473'.'o3q1925oo7p'.'5o6sss2sr/v');
  66. $data['filter']['replace'][] = str_rot13(str_replace($l, ' ', '****7JR7JVYY7JVA7'.
  67. 'GUR7SHGHER7****\aCbjrerq7ol7Pebffqnl7Qvfphm!7Obneq7I')).$l;
  68. }
  69. savecache('censor', $data);
  70. }
  71. ?>