jQuery自动完成将查询转换为小写

时间:2015-06-18 06:25:57

标签: php jquery mysql jquery-ui autocomplete

我正在为项目使用jQuery Autocomplete插件1.1。

这是我的主叫代码:

$("#txtCombo").autocomplete("http://www.example.com/autocomplete.php", {
            autoFill: false,
            width: 550,
            minChars: 3,
            selectFirst: false
        });

问题是我输入的自动完成功能,当它到达php文件时会转换为小写文件autocomplete.php

例如如果我搜索“智能男孩”,php文件将收到“聪明的男孩”。这在某种程度上是好的,因为当我在数据库中进行类似的查询搜索时,无论字母大小写如何,我都会得到所有匹配的结果。

但问题是,当我为希腊字符运行此脚本时,例如,当我输入查询“ΜικρέςΟικιακέςΣυσκευές”时,它被转换为“μικρέςοικιακέςσυσκευές”。现在当我使用如下的类似查询时:

"SELECT ID, NAME FROM CATEGORIES WHERE NAME LIKE '%".$query."%'"

我什么都没得到,因为数据库不会检查带有不区分大小写搜索的希腊字母。

我尝试使用像这样的collat​​ion关键字:

"SELECT ID, NAME FROM CATEGORIES WHERE NAME LIKE '%".$query."%' COLLATE utf8_general_ci"

但是我收到了这个错误: COLLATION'utf8_general_ci'对CHARACTER SET'latin1'无效

我知道表格的charset是latin1所以它不能用于utf8整理,所以如果我尝试使用latin1_general_ci整理,它会给我这个错误:

非法混合排序(utf8_general_ci,IMPLICIT)和(latin1_general_ci,EXPLICIT)进行“喜欢”操作

只有我可以通过将查询转换为小写来停止自动完成,它才能解决问题。

为什么在我没有在要调用的参数中指定任何此类内容时,插件仍会转换为小写?

任何想法......

2 个答案:

答案 0 :(得分:0)

我终于通过在文件jquery.autocomplete.js中搜索单词" lower"来找到解决方案。我发现如果选项" matchCase"它会将搜索查询转换为小写。在调用参数中找不到,或者如果它未设置为true。

所以我按照这样编辑了我的电话:

$("#txtCombo").autocomplete("http://www.example.com/autocomplete.php", {
        autoFill: false,
        width: 550,
        minChars: 3,
        matchCase: true,
        selectFirst: false
    });

它有效!现在它不会将查询转换为小写。

我认为自己发布一个问题可以澄清寻找解决方案的新方法。我没有想到要找到"更低的"在此之前的插件文件中。即使插件文件缩小了,我仍然在那里找到了这段代码:

... if(!options.matchCase)currentValue=currentValue.toLowerCase(); ...

让我知道为什么它可以转换为小写。

这个答案可能会帮助有相同情况的人。

此致

答案 1 :(得分:0)

您可以使用混合大小写匹配...和onClickAfter回调..您可以访问原始项目,案例完好无损。

例如......如果我的数据集有一个名为'name'的属性,我可以通过以下方式检索它的原始值:

 onClickAfter: function (node, a, item, event) {

    var name = item.name;
    . . . . .