个别搜索类的网站因为用户恶意搜索出现误拦截情况,这类网站本身没有非法信息,只是因为把搜索关键字显示在网页中(如下图),可以参考下面方法对输出的关键字进行转码
DEDECMS程序
本文针对Dedecms程序进行搜索转码,其它程序原理类似:对搜索结果的关键字进行转码后输出
一:查看网站编码,访问后台下面会显示,GBK和UTF8两个版本
二:复制下面代码到 include/extend.func.php 文件尾部(根据您的网站编码复制对应的代码,编辑网页时推荐使用notepad、editplus软件)
UTF-8编码
function CharCodeAt($str) { $strr=""; for($i=0;$i<mb_strlen($str,'utf-8');$i++){ $char = mb_substr($str,$i,1, 'UTF-8'); if (mb_check_encoding($char, 'UTF-8')) { $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8'); $strr.="&#".hexdec(bin2hex($ret)); } else { return null; } } return $strr; }
GBK编码
function CharCodeAt($str) { $strr=""; for($i=0;$i<mb_strlen($str,'gb2312');$i++){ $char = mb_substr($str,$i,1, 'gb2312'); if (mb_check_encoding($char, 'gb2312')) { $ret = mb_convert_encoding($char, 'UTF-32BE', 'gb2312'); $strr.="&#".hexdec(bin2hex($ret)); } else { return null; } } return $strr; }
三:修改搜索模板文件templets/default/search.htm 【其它模板可能路径会有变化】
找到: {dede:global name='keyword' function='RemoveXSS(@me)'/}
替换成:{dede:global name='keyword' function='CharCodeAt(RemoveXSS(@me))'/}
四:查看搜索页源代码,查看是否生效
Discuz 程序,示例针对Discuz!X3.4 GBK版本
一、查看网页编码
1.网页右键查看源代码
2.查看config/config.php 的$_config['output']['charset']
二、根据编码复制上面的CharCodeAt函数,修改 source/function/function_search.php 文件,加到文件尾部,注意在?> 前面
三、修改source/module/search/search_forum.php 程序
在129行添加如下两行代码
$keyword = CharCodeAt($keyword);
$modkeyword = CharCodeAt($modkeyword);
四、查看搜索页源代码,检查是否生效
原文链接:https://www.west.cn/faq/list.asp?unid=1952