В конечном счете, вам придется отказаться от идеи «правильно» для этой проблемы. Перевод строки, независимо от того, как вы это делаете, разрушает точность во имя совместимости и читабельности. Все три варианта одинаково совместимы, но № 1 и № 2 страдают с точки зрения читабельности. Так что просто бегите с этим и выбирайте то, что выглядит лучше всего - вариант № 3.
Да, переводы неверны для немецкого языка, но если вы не начнете требовать от своих пользователей указывать, на каком языке их названия (и ограничивать их только одним), вы не решите эту проблему без гораздо больших усилий, это стоит (Например, прогон каждого слова в названии через словари для каждого известного языка и перевод диакритических знаков этого слова в соответствии с правилами его языка будет работать , но это излишне.)
В качестве альтернативы, если немецкий язык важнее других языков, сделайте перевод всегда , используйте версию на немецком языке, если она существует: ä
→ ae
, ë
→ e
, ï
→ i
, ö
→ oe
, ü
→ ue
.
Edit:
О, а что касается фактического метода, я бы перевел особые случаи, если они есть, через str_replace
, затем использовал бы iconv
для остальных:
$text = str_replace(array("ä", "ö", "ü", "ß"), array("ae", "oe", "ue", "ss"), $text);
$text = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text);