是否可以使用 PHP 在同一函数中将小写字母转换为大写字母并删除重音符号?

Is it possible to convert lowercase to uppercase AND remove accents in the same function using PHP?

我正在编写 PHP 代码,其中 $posted_data['name'] 是我的变量。 为了将其转换为大写字母,我使用了以下内容:(效果很好)

$uppercase = $posted_data['name'];
$uppercase = strtoupper($uppercase);

但是我想知道是否可以在同一行中实现另一个功能,即删除字母重音或清理方法。

例如:

用户的字符串输入:João

字符串输出:JOAO

因此,在这种需要的情况下,这里有两个函数 运行:一个是将小写字母转换为大写字母,另一个是删除重音符号。

这里有一些神奇之处,它将变音符号转换为非变音字符,然后将字母转换为大写。

<?php

function slug($string) {
    return strtoupper(trim(preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '', htmlentities($string, ENT_QUOTES, 'UTF-8')), ' '));
}

$string = 'João';
echo slug($string);

Demo

下面是同一个示例,每个函数调用都被分解成不同的行,以使其工作方式更加清晰:

function slug($string) {
    $str = htmlentities($string, ENT_QUOTES, 'UTF-8');
    $str = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '', $str);
    $str = trim($str, ' ');
    return strtoupper($str);
}

PHP 的 unicode 支持 (ext/intl) 可以在一次调用中完成:

$string = 'Hello ÄöÜ!';
var_dump(
    \Transliterator::create('Any-Upper; Latin-ASCII')->transliterate($string)
);

输出:

string(10) "HELLO AOU!"