Преобразование ASCII и UTF-8 в неспециальные символы с одной функцией

Поэтому я создаю веб-сайт, в котором используется фид базы данных, который уже настроен и уже давно используется клиентом для всех других веб-сайтов.

Они заполняют эту базу данных через внешнюю программу, и у меня нет возможности изменить способ получения моих данных.

Теперь у меня есть следующая проблема: иногда я получаю строки в UTF-8, а иногда и в ASCII (я надеюсь, что у меня эти условия правильные, иногда они немного расплывчаты).

Поэтому я мог бы получить это: Scénic или Scénic .

Теперь проблема в том, что я должен преобразовать это в неспециальные символы (так что это станет Scenic ) для URL-адресов.

Я не думаю, что есть функция для преобразования é в e (если это нужно сказать), поэтому мне, вероятно, понадобится создать массив для этого, содержащий весь источник и адресатов, но большая проблема заключается в преобразовании é до é без нарушения é когда он приходит через эту функцию.

Или я должен просто создать массив, содержащий все
(например, например: array('é'=>'e','é'=>'e'); и т. д.

Я знаю, как получить é to é , выполнив utf8_encode(html_entity_decode('é')) , однако при выполнении этой же функции вернет é .

Возможно, я приближаюсь к этому неправильно, но в таком случае мне бы хотелось знать, как я должен подходить к нему.

Благодаря @XzKto и этому комментарию на PHP.net я изменил функцию slug на следующее:

 static function slug($input){ $string = html_entity_decode($input,ENT_COMPAT,"UTF-8"); $oldLocale = setlocale(LC_CTYPE, '0'); setlocale(LC_CTYPE, 'en_US.UTF-8'); $string = iconv("UTF-8","ASCII//TRANSLIT",$string); setlocale(LC_CTYPE, $oldLocale); return strtolower(preg_replace('/[^a-zA-Z0-9]+/','-',$string)); } 

Я чувствую, что setlocale часть немного грязная, но это отлично работает для перевода специальных символов в их «нормальные» эквиваленты.

a áñö ïß éèé возвращает a-ano-iss-eee