iconv возвращает странные результаты

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

Пример: Jörgen Götz должен получить адрес электронной почты jorgen.gotz@domain.com, но в пользовательской базе данных его фамилия должна быть Йорген и его фамилия Гётц. Надеюсь, я не буду не понимать, чего я хочу достичь.

Я экспериментировал с iconv (), но у меня проблемы с ним. См. Код ниже.

$ utf8_sentence = 'Weiß, Goldmann, Göbel, Weiss, Göthe, Goethe und Götz';

setlocale (LC_ALL, 'en_GB');

echo $ trans_sentence = iconv ('UTF-8', 'ASCII // TRANSLIT', $ utf8_sentence);

Приведенный выше код должен вернуться

Вайс, Гольдманн, Гобель, Вайс, Готе, Гете и Гоц

но вместо этого он дает мне

Вайсс, Голдманн, Г-н-Обель, Вейсс, Г-н, Гёте и Г "отц

Я не понимаю, что там делают цитаты.

И Chrome, и IE дают мне тот же результат, и на странице используется charset = "utf-8".

Прежде чем использовать iconv (), я попытался использовать strtr () вместе с массивом «нежелательных» символов, но мне не нравится, когда вам нужно устанавливать массив специальных символов каждый раз, когда мне нужно преобразовывать строки взад и вперед.

Может ли кто-нибудь предложить объяснение или разрешение?

TRANSLIT пытается найти символы, похожие на запрошенный символ. Поскольку буква is не находится в ascii, она меняет ее на пару для umlat и основной буквы.

Попробуйте добавить это в свою систему (терминал в Ubuntu):

 sudo locale-gen de_DE.UTF-8 

Затем изменив языковой стандарт вашего php-скрипта:

 setlocale(LC_ALL, 'de_DE.UTF-8'); 

Изменить (настройка Windows)

В Windows Server вам необходимо установить пакет немецкого языка и изменить его на:

 setlocale(LC_ALL, 'germany');