我们在使用dedecms v5.7进行英文搜索的时候,发现如果输入的是大写字母,dedecms将自动过虑掉,而只搜索小写的字母和数字,所以往往对于得到的搜索结果不是很令人满意,纠其原因发现dedecms中/include/helpers/filter.helper.php文件中正式表达式没有添加A-Z的规则,立即动手来解决这个小Bug吧!
例如:我们搜索“IThov”,但搜索结果中只保留了“hov”,过滤掉大写字母的截图如下:
首先下载你的/include/helpers/filter.helper.php文件到本地电脑,并用编辑器打开,找到程序的第169行,代码如下:
if(preg_match("/[^0-9a-z@#\.]/",$keyword[$i]))&">nbsp;
将其修改为:
if(preg_match("/[^0-9a-zA-Z@#\.]/",$keyword[$i]))
完整的修改代码如下:
/** * 过滤用于搜索的字符串 * * @param string $keyword 关键词 * @return string */ if ( !
function_exists('FilterSearch')) { function FilterSearch($keyword) { global $cfg_soft_lang; if($cfg_soft_lang=='utf-8') { $keyword = preg_replace("/[\"\r\n\t\$\\><']/", '', $keyword); if($keyword != stripslashes($keyword)) { return ''; } else { return $keyword; } } else { $restr = ''; for($i=0;isset($keyword[$i]);$i++) { if(ord($keyword[$i]) > 0x80) { if(isset($keyword[$i+1]) && ord($keyword[$i+1]) > 0x40) { $restr .= $keyword[$i].$keyword[$i+1]; $i++; } else { $restr .= ' '; } } else { if(preg_match("/[^0-9a-zA-Z@#\.]/",$keyword[$i])) /* 将这里改为"if(preg_match("/[^0-9a-zA-Z@#\.]/",$keyword[$i]))"即可 */ { $restr .= ' '; } else { $restr .= $keyword[$i]; } } } } return $restr; } }
上传并覆盖原文件,重新测试搜索结果!
哈哈!终于正常啦!大家赶紧动手来解决这个小BUG吧!