На этот вопрос уже есть ответ здесь:
Какой самый эффективный способ удаления акцентов из строки, например, ,
становится Eaun
?
Есть простой, встроенный способ, который я пропускаю или регулярное выражение?
Если у вас установлен iconv, попробуйте следующее (в примере предполагается, что ваша входная строка находится в UTF-8):
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);
(iconv - это библиотека для преобразования между всеми видами кодировок; она эффективна и включена во многие дистрибутивы PHP посредством По умолчанию. Более того, это определенно проще и надежнее, чем пытаться использовать собственное решение (знаете ли вы, что есть «латинская буква N с завитком»? Я тоже .))
Вы можете использовать iconv
для транслитерации символов в обычный US-ASCII, а затем использовать регулярное выражение для удаления неалфавитных символов:
preg_replace('/[^a-z]/i', '', iconv("UTF-8", "US-ASCII//TRANSLIT", $text))
Другой способ - использовать нормализатор для нормализации до нормализации Сформируйте KD (NFKD) , а затем удалите символы отметки:
preg_replace('/\p{Mn}/u', '', Normalizer::normalize($text, Normalizer::FORM_KD))