0

我想从西里尔输入优化我的搜索 sql 查询。

如果用户输入“čšž”,则数据库返回带有“čšž”和“csz”的结果。

$result = mysqli_query($con,"SELECT * FROM Persons WHERE name = ?");

SQL 或 PHP 应将字符转换为非西里尔字母。

有任何想法吗?

4

2 回答 2

1

您应该UTF8_unicode_ci对列(或表或整个数据库)使用排序规则,然后数据库应该处理您想要的所有内容。

于 2014-03-20T13:38:11.180 回答
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

服务器使用了错误的 iconv 实现。它具有 glibc 版本而不是所需的 libiconv 版本。

在这种情况下,您可以使用这种适用于大多数情况的丑陋技巧:

function stripAccents($stripAccents){
  return strtr($stripAccents,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

取自这个答案

于 2014-02-03T08:58:53.227 回答