Я работаю над тем, чтобы решить проблему со специальными символами в автоматическом скрипте для создания учетных записей в 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 Server вам необходимо установить пакет немецкого языка и изменить его на:
setlocale(LC_ALL, 'germany');