“全站搜索表单”标签不能搜索中文

作者:佚名 来源:本站原创 点击数: 发布时间:2011年12月07日

有些用户在使用“全站搜索表单”标签对网站内容进行搜索的时候,会发现一个问题:只能对数字或者字母进行搜索,对中文却搜索不到内容。

整个搜索流程中用到了全站搜索表单、全站搜索按标题、全站搜索按标题_普通式这3个标签。

全站搜索表单:用于让用户填写需要搜索的内容,以及把内容提交到后面的标签进行搜索。

全站搜索按标题:用于接收前者提交过来的内容后,对数据库进行搜索。

全站搜索按标题_普通式:用于显示搜索后的结果。

搜索的执行流程大概如下:

1、输入 keyword  为"中文",点击提交按钮
2、js处理,将“中文”转义成 “%u4E2D%u6587”
然后构造了url:
http://你的域名/search.aspx?searchtype=2&showtype=1&ModelId=23&ExpertCode=&SpecialCode=&SectionCode=&expertName=%u4E2D%u6587
3、然后拿这个url提交给服务器
4、服务器接受到这个url请求
5、然后交由我们系统处理
6、我们系统会把参数“%u4E2D%u6587”反转义回“中文”
7、然后再构建sql,拿去数据库查询

下面给大家讲讲解决思路:

第一步:我先直接在“全站搜索按标题_普通式”标签中把中文搜索内容输入后,标签能正确显示出来,这样来说,就基本上可以判断出是“全站搜索表单”标签把中文内容提交到“全站搜索按标题”标签的时候出问题了,为什么中间还有一个“全站搜索按标题_普通式”却跳过了?因为“全站搜索按标题_普通式”只是显示“全站搜索按标题”查询到的结果,所以不会引起能搜索数字却不能搜索中文这个问题。

第二步:我通过和另外一个能正常搜索中文的标签对比了搜索结果的URL地址,为了方便,我选择的两个搜索标签的结果页都是用search.aspx这个动态页,因为同一个动态页,所接收的参数也是一样的,这样就能最快地判断问题了。

第三步:我在网站中添加了一篇标题为“测试”的文章,然后分别用“全站搜索表单”和另一个正常的搜索标签对标题进行搜索,发现搜索出来的结果页URL如下:

“全站搜索表单”------search.aspx?searchType=0&keyword=%25u6D4B%25u8BD5

另一个搜索标签-------search.aspx?searchType=0&keyword=%E6%B5%8B%E8%AF%95

第四步:通过这个测试,就能判断是在搜索框中输入的文字转义问题了,然后我们编辑“全站搜索表单”标签,找到下面这段代码:

submit.click(function() {
        var value = input.val();
        var param = { searchType:0, keyword:escape(value) };
        var path = siteSetup.sitePath + 'search.aspx?'
        if (value == '请输入关键字' || value == '') {
            alert('请输入关键字进行搜索!');
            return;
        }
        location.href = path + $.param(param);
发现表单最终把搜索关键字是提交到下面地址path + $.param(param);,path和param可以在上面的代码看到声明,path是网站地址和动态页文件名,param就是页面获取的参数了,其中keyword就是我们在表单中输入的信息,到这里终于找到问题的源头了,keyword:escape(value)这段代码对输入的中文进行了转义,只要取消转义就可以了。

改为这样

submit.click(function() {
        var value = input.val();
        var param = { searchType:0, keyword:value };
        var path = siteSetup.sitePath + 'search.aspx?'
        if (value == '请输入关键字' || value == '') {
            alert('请输入关键字进行搜索!');
            return;
        }
        location.href = path + $.param(param);