Я думаю, что в конечном итоге лучшим способом было бы использование правильной функции IDN для преобразования входящей строки в строку ACE (xn--xyz-blah.com
). Если этот процесс работает, доменное имя является действительным. Если это не так, это не так.
Существует функция PHP с именем idn_to_ascii()
, которая делает это, но для этого нужны дополнительные библиотеки. Вам нужно посмотреть, доступен ли он в вашей системе.
Также существует внешняя команда Linux с именем idn
, которая выполняет преобразования IDN. Впрочем, я ничего об этом не знаю.
Если вы хотите использовать только встроенные методы PHP, delfuego предоставляет регулярное выражение в этот вопрос , который выглядит очень хорошо.