我想从西里尔输入优化我的搜索 sql 查询。
如果用户输入“čšž”,则数据库返回带有“čšž”和“csz”的结果。
$result = mysqli_query($con,"SELECT * FROM Persons WHERE name = ?");
SQL 或 PHP 应将字符转换为非西里尔字母。
有任何想法吗?
您应该UTF8_unicode_ci
对列(或表或整个数据库)使用排序规则,然后数据库应该处理您想要的所有内容。
这将使用iconv来解决问题:
// your input
$input = "Fóø Bår";
setlocale(LC_ALL, "en_US.utf8");
// this will remove accents and output standard ascii characters
$output = iconv("utf-8", "ascii//TRANSLIT", $input);
// do whatever you want with your output, for example use it in your MySQL query
// or just "echo" it, for demonstration
echo $output;
请注意,当服务器上安装了错误的版本时,这可能无法按预期工作。iconv
服务器使用了错误的 iconv 实现。它具有 glibc 版本而不是所需的 libiconv 版本。
在这种情况下,您可以使用这种适用于大多数情况的丑陋技巧:
function stripAccents($stripAccents){
return strtr($stripAccents,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}
取自这个答案。