我正在处理一个过滤系统,目前正在做的php和我碰到了一个砖墙,而试图使一个口述给用户。
我从数据库中提取了一个按姓氏排序的用户列表,它给出了这样一个理论列表:
[
{
"first name" : "Bob",
"Last name" : "Éthier"
},
{
"first name" : "Paul",
"Last name" : "Foo"
},
{
"first name" : "Alice",
"Last name" : "Smith"
},
]
现在问题来了,当我试图做一个列表,上面说的用户从某个字母开始,“a,b,c,…”
如果我要做的事情
if(strtoupper(substr($arr["Last name"], 0, 1)) >= $filterLetter)
// Add account to display list to eventually show on page
我想发生的是,当我选择字母“f”作为过滤器时,我的列表显示f及以上,所以基本上它会从每个其他人开始用字母f,最后继续,还显示smith等等。
当前发生的情况是,如果我选择的字母过滤器高于某个重音字符,则字符串会比较程序的一部分错误,并认为它是好的并显示它。
当前,当我选择f作为“开始索引”时,bobé他们的表演,即使它不应该,我真的不知道为什么会发生。这似乎发生在每一个口音的字母不仅é.
是不是因为我真的觉得é" > f应该是假的,但在我的情况下它是真的。
编辑:我的数据库系统是:mysql,我的字符集是latin1,排序规则是latin1\u-swedish\u-ci(这很可能是问题的一部分),字符确实正确地显示在页面上。
2条答案
按热度按时间gcxthw6b1#
您可以使用下面给定的函数将重音字符串转换为普通字符串,然后继续进行必要的检查。
这样你就不会对重音字符有任何问题了。
de90aj5v2#
可以使用iconv删除音调符号。确保正确设置区域设置,否则iconv可能返回意外字符。以下应起作用:
然后使用$char与索引进行比较。
编辑:substr不适用于重音字符,使用mb\u substr并传递utf-8作为编码解决了这个问题。