是否可以使用 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);
下面是同一个示例,每个函数调用都被分解成不同的行,以使其工作方式更加清晰:
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!"
我正在编写 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);
下面是同一个示例,每个函数调用都被分解成不同的行,以使其工作方式更加清晰:
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!"