我想从西里尔语输入中优化我的搜索SQL查询。
如果用户输入'čšž'数据库,则返回'čšž'和'csz'的结果。
$result = mysqli_query($con,"SELECT * FROM Persons WHERE name = ?");
SQL或PHP应该将字符转换为非西里尔字母。
有什么想法吗?
答案 0 :(得分:1)
您应该对列(或表或整个数据库)使用UTF8_unicode_ci
排序规则,然后数据库应该处理您想要的所有内容。
答案 1 :(得分:0)
这将使用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
,则可能not work as expected。
服务器正在使用iconv的错误实现。它有glibc版本而不是所需的libiconv版本。
在这种情况下,您可以使用适用于大多数情况的丑陋黑客:
function stripAccents($stripAccents){
return strtr($stripAccents,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}
取自this answer。