민감한 단어 대체 알고리즘, str_replace보다 4배 더 효율적(6,000개의 민감한 단어 첨부)
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-07-25 09:08:00
效率对比(12688个字符,替换1次):
- str_replace: 0.109937906265秒
- strtr: 0.0306839942932秒
替换结果对比
- 比如:「张三」、「张三丰」、「张三丰田」 均为违禁词 (为何会有这样的区分?请参见 「法X」、「法Xgong」)
-
原文:「我今天开着张三丰田去上班 」
-
strtr:「我今天开着****去上班 」(四个词均替换为了*)
-
str_replace:「我今天开着**丰田去上班 」(仅仅替换了第一个匹配项)
所以使用str_replace替换,是不能本质上解决问题。
时间对比:
关键词数量:6712 (无重复)
self init:0.00789093971252(加载xcache)
self:0.0354378223419
strtr:0.0311169624329
strtr_array:0.432713985443
str_replace:0.109627008438
- require('badword.src.php');
- $badword1 = array_combine($badword,array_fill(0,count($badword),'*'));
- $bb = '我今天开着张三丰田上班';
- $str = strtr($bb, $badword1);
复制代码
- //有兴趣的朋友可以研究一下
- function strtr_array(&$str,&$replace_arr) {
- $maxlen = 0;$minlen = 1024*128;
- if (empty($replace_arr)) return $str;
- foreach($replace_arr as $k => $v) {
- $len = strlen($k);
- if ($len < 1) continue;
- if ($len > $maxlen) $maxlen = $len;
- if ($len < $minlen) $minlen = $len;
- }
- $len = strlen($str);
- $pos = 0;$result = '';
- while ($pos < $len) {
- if ($pos $maxlen > $len) $maxlen = $len - $pos;
- $found = false;$key = '';
- for($i = 0;$i<$maxlen; $i) $key .= $str[$i $pos]; //原文:memcpy(key,str $pos,$maxlen)
- for($i = $maxlen;$i >= $minlen;--$i) {
- $key1 = substr($key, 0, $i); //原文:key[$i] = '
|
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
-
2025-02-26 03:58:14
-
2025-02-26 03:38:10
-
2025-02-26 03:17:10
-
2025-02-26 02:49:09
-
2025-02-26 01:08:13
-
2025-02-26 00:46:10
-
2025-02-25 23:42:08
-
2025-02-25 22:50:13
-
2025-02-25 21:54:11
-
2025-02-25 20:45:11
최신 이슈
-
2025-03-21 13:39:34
-
2025-03-21 13:38:34
-
2025-03-21 13:37:19
-
2025-03-21 13:35:24
-
2025-03-21 13:34:32