Ответ 1
ВАЖНО
Этот ответ предназначен для ситуаций, когда невозможно запустить/установить расширение 'intl', и только сортирует строки, заменяя акцентированные символы на символы без акцента. Чтобы отсортировать символы с акцентом в соответствии с определенной локалью, используйте Collator - лучший подход - см. другой ответ на этот вопрос для получения дополнительной информации.
Сортировка неактивными символами в PHP 5.2
Вы можете попробовать преобразовать обе строки в ASCII с помощью кнопок iconv() и //TRANSLIT, чтобы избавиться от акцентированных символов;
$str1 = iconv('utf-8', 'ascii//TRANSLIT', $str1);
Затем выполните сравнение
Смотрите документацию здесь:
http://www.php.net/manual/en/function.iconv.php
[обновлено, в ответ на замечание @Esailija] Я упустил проблему //TRANSLIT, переводя акцентированных персонажей неожиданными способами. Эта проблема упоминается в этом вопросе: php iconv translit для удаления акцентов: не работает как исключено?
Чтобы сделать подход "iconv()", я добавил пример кода ниже, который разбивает все символы без слов из результирующей строки, используя preg_replace().
<?php
setLocale(LC_ALL, 'fr_FR');
$names = array(
'Zoey and another (word) ',
'Émilie and another word',
'Amber',
);
$converted = array();
foreach($names as $name) {
$converted[] = preg_replace('#[^\w\s]+#', '', iconv('UTF-8', 'ASCII//TRANSLIT', $name));
}
sort($converted);
echo '<pre>'; print_r($converted);
// Array
// (
// [0] => Amber
// [1] => Emilie and another word
// [2] => Zoey and another word
// )