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

标签 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 时,它都会转换为小写

例如如果我搜索“Smart Boy”,php 文件将收到“smart boy”。这在某种程度上很好,因为当我在数据库中对查询进行类似搜索时,无论字母大小写如何,我都会得到所有匹配结果。

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

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

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

我尝试使用这样的排序规则关键字:

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

但我收到此错误: 排序规则“utf8_general_ci”对于字符集“latin1”无效

我知道表的字符集是 latin1,所以它不能与 utf8 排序规则一起使用,所以如果我尝试使用 latin1_general_ci 排序规则,它会给我这个错误:

“like”操作的排序规则 (utf8_general_ci,IMPLICIT) 和 (latin1_general_ci,EXPLICIT) 的非法混合

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

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

任何想法......

最佳答案

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

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

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

它成功了!现在它不会将查询转换为小写。

我认为发布一个问题本身就澄清了寻找解决方案的新方法。在此之前,我没有想到要在插件文件本身中查找“lower”一词。即使插件文件被缩小了,我仍然在那里找到了这段代码:

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

这让我明白了为什么它可以转换为小写。

也许这个答案会对有同样情况的人有所帮助。

问候

关于php - jQuery 自动完成将查询转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30907940/

相关文章:

php - MySQL/PHP : Identify site users who share their login credentials

javascript - Asp.net MVC 3.0 中的 JQuery 模式和最佳实践

javascript - AJAX 文件上传给出未定义的文件错误

php - 无法从 php 数据库值插入多个值

mysql - 谷歌大查询

mysql - SQL过程使用/临时表优化

php - 从表中排序数据,分配给变量然后从另一个文件调用

php - php字符串是不可变的吗?

javascript - 我需要将网站重定向到 21.45 到 10.00 之后的页面

php - 如何在 Laravel 中将服务器时间转换为本地时间?