Проверка международного идентификатора ресурса

Проверить URI для RFC 3986 довольно просто. Вы можете использовать регулярное выражение вроде:

/^                                                     # Start at the beginning of the text
([a-z][a-z0-9\*\-\.]*)://                            # The scheme
(?:                                                    # Userinfo (optional)                                              
  (?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*
  (?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@
)?
(?:                                                    # The domain
  (?:[a-z0-9\-\.]|%[0-9a-f]{2})+                       # Domain name or IPv4
  |(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\])        # or IPv6
)
(?::[0-9]+)?                                           # Server port number (optional)
(?:[/|\?]
  (?:[\w#!:\.\?\+=&@!$'~*,;/\(\)\[\]\-]|%[0-9a-f]{2}) # The path (optional) 
*)?
$/xi

Но это не работает для международных символов, подобных тем, которые встречаются в международных доменных именах. Например, http: // 例 え. テ ス ト / メ イ ン ペ ー ジ.

Используя что-то вроде

filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED);

для них тоже не работает. Проблема связана с используемыми персонажами.

Есть ли хороший способ проверить URI в PHP?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
276
1

Ответы 1

С preg_match \ pL будет соответствовать любой букве юникода. Поэтому замените a-z на \ pL. И 0-9 с \ pN. См. Детали регулярного выражения для получения дополнительной информации.

Другие вопросы по теме