首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个字符串并忽略(但不是替换)重音。PHP

比较两个字符串并忽略(但不是替换)重音。PHP
EN

Stack Overflow用户
提问于 2014-12-28 21:12:35
回答 3查看 9.5K关注 0票数 14

我(例如)有两个字符串:

代码语言:javascript
复制
$a = "joao";
$b = "joão";

if ( strtoupper($a) == strtoupper($b)) {
    echo $b;
}

我希望这是真实的,即使是强调。然而,我需要它忽略重音,而不是替换,因为我需要它回应“若昂”而不是“若昂”。

我看到的所有答案都以"a“代替,而不是使比较成为现实。我一直在读关于正常化的文章,但我也不能让它正常工作。有什么想法吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-28 21:15:48

只需将重音转换为它们的非重音计数器部分,然后比较字符串。我的答案中的函数会帮你去掉重音。

代码语言:javascript
复制
function removeAccents($string) {
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'))), ' '));
}

$a = "joaoaaeeA";
$b = "joãoâàéèÀ";

var_dump(removeAccents($a) === removeAccents($b));

输出:

代码语言:javascript
复制
bool(true)

演示

票数 25
EN

Stack Overflow用户

发布于 2021-05-04 09:04:23

我想分享一个优雅的解决方案,它可以避免使用that实体,并且不需要手动列出所有字符替换。它是 post的答案在php中的转换。

代码语言:javascript
复制
function removeAccents($str) {
    return preg_replace('/[\x{0300}-\x{036f}]/u',"",normalizer_normalize($str,Normalizer::FORM_D));
}

$a = "joaoaaeeA";
$b = "joãoâàéèÀ";

var_dump(removeAccents($a) === removeAccents($b));

输出:

代码语言:javascript
复制
bool(true)
票数 2
EN

Stack Overflow用户

发布于 2016-11-12 12:48:59

它不是一个普通的PHP解决方案,但是在这种情况下工作得很好,在MySQL上运行这个查询:

代码语言:javascript
复制
SELECT 'joão' = 'joao'

因此,如果您可以访问mysql,就可以通过PHP使用它。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27680624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档