|
—
本帖被 瓜牛 从 二次开发专区 移动到本区(2012-01-10)
—
pw8.7 2011111版本还是没有添加对html实体过滤的代码,在/lib/filter/filterutil.class.php里面是带了两个过滤火星文,和标点的函数(filterChineseCode与filterSymbol)但由于效率问题未被启用。(ps:本来我也不知道有效率问题,指导孝感网开启了那连个函数以后,大于1500字的帖子发不上去才知道)。 继续刚才html实体字符(ps:一些字符在 HTML 中拥有特殊的含义,比如小于号 “<”要然它显示可以用"& lgt;"表示。但是并非只有特殊字符才可以用html实体,而是latin-1包含的所有字符都可以 )的问题,比如“& #23567;& #22992;”这个词,页面上显示的为"小姐",刚才也说过我们程序是没有对实体进行转换的,这样就可以轻松绕过敏感词流程。。。然后头痛的"小姐"问题就产生了。 那这样的话算法我们不研究,把实体转换成中文,至少可以挡住和后台设置一样的敏感词吧。我加了一个replaceHtmlChar函数作为转换,具体代码如下 - $content = preg_replace('/(\&\#[0-9a-zA-Z]{5,5};)/ie', "replaceHtmlChar('\\1')", $content) ;//实体转换字符
- function replaceHtmlChar($char) {
-
- //$char = html_entity_decode($char);
- $convmap = array(0x0, 0x2FFFF, 0, 0xFFFF);
- return mb_decode_numericentity($char, $convmap, 'GB2312');
- //echo $char;
- }
用正则匹配出&#xxxxx的格式加以转换。 至于其他简单的加空格,加长见火星文我也稍微过滤了下。 - function replaceChar($content) {
- $filterTag = array(' ', ';', ',', '.', '!', '?', ',', '。', '!', '?', ';', '“', '”', '‘', '※','≮', '【', '】', '●', '◆','↖','♂', '♀', '∷', '╓', '☆', '┠', '㊣', '*', '★', '⊙', '-', '——', '{', '}', '(', ')', '+', '_', '=', '&', '~', '$', '%', '^', '<', '>', ' ');
- $content = str_replace($filterTag, '', $content);
- $content = preg_replace(array("/\s+/"), "", $content);
- return $content;
- }
这个函数,基本上效果还是有一点的,其余的只能到后台多加敏感词了。。 附上 /lib/filter/filter.class.php 8.7版本直接覆盖即可
|