当前位置:  开发笔记 > 编程语言 > 正文

用PHP比较PHP中的字符串

如何解决《用PHP比较PHP中的字符串》经验,为你挑选了1个好方法。

我将varchar存储在utf8 MySQL表中并使用utf8_general_ci排序规则.我在varchar上有一个唯一的索引.我想在PHP中进行字符串比较,这与MySQL在索引上的操作相同.

一个具体的例子是,在发生这种情况之前,我希望能够在PHP中检测到'a'被认为等同于'À':

mysql> insert UniTest (str) values ('a');                                   
Query OK, 1 row affected (0.00 sec)

mysql> insert UniTest (str) values ('À');                                   
ERROR 1062 (23000): Duplicate entry 'À' for key 1

troelskn.. 9

整理与存储无关.您需要设置charset以确定存储编码.整理控制着如何进行比较和排序.整理必须是charset意识,否则它与charset无关.

要回答您的问题,您可以使用iconv转换文本,然后进行比较.例如:

function compare($s1, $s2) {
  return strcmp(
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s1),
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s2));
}

这基本上就是MySql会为你做的事情,虽然它可能更快,并且可能有一个稍微不同的校对表ISO-8859-1//TRANSLIT.不完全确定.

可能更容易使用数据库,正如其他人已经建议的那样.



1> troelskn..:

整理与存储无关.您需要设置charset以确定存储编码.整理控制着如何进行比较和排序.整理必须是charset意识,否则它与charset无关.

要回答您的问题,您可以使用iconv转换文本,然后进行比较.例如:

function compare($s1, $s2) {
  return strcmp(
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s1),
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s2));
}

这基本上就是MySql会为你做的事情,虽然它可能更快,并且可能有一个稍微不同的校对表ISO-8859-1//TRANSLIT.不完全确定.

可能更容易使用数据库,正如其他人已经建议的那样.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有