#php #encoding
Вопрос:
Мне нужна помощь в удалении диакретических знаков.
У меня Ä
закодирован следующий символ UTF-8
, и я хочу удалить две точки: Ä -> A
Но я также хочу, чтобы это было для всех существующих персонажей (или для большинства), как это:
Ä => A È => E Ö -> O Ü -> U
À => A Ê => E Ô -> O Û -> U
 => A É => E Ò -> O Ù -> U ...
Я также нашел функцию Normalizer::normalize
, но при ее применении все Ä
равно возвращается то же самое: Ä
.
Есть какие-нибудь идеи? Спасибо!
Ответ №1:
Я держу эту функцию в заднем кармане для таких случаев:
<?php
function replaceAccents(string $str): string
{
$str = htmlentities($str, ENT_COMPAT, "UTF-8");
$str = preg_replace('/amp;([a-zA-Z])(uml|acute|grave|circ|tilde|ring);/', '$1', $str);
return html_entity_decode($str);
}
$input = 'ÄÈÖÜÀÊÔÛÂÉÒÙ';
$output = replaceAccents($input);
echo $output.PHP_EOL;
Выход:
AEOUAEOUAEOU
Я не уверен, что это самое элегантное решение, но оно эффективно.