PHP MySQL搜索西里尔字符

时间:2014-02-03 08:51:38

标签: php mysql search cyrillic

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

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

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

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

有什么想法吗?

2 个答案:

答案 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