Согласно PHP документам: Locale::canonicalize( string $locale )
всегда возвращает строку.
После тестирования метода с несколькими входами, я всегда получаю строку …. кроме этого ввода
'char(119)+char(104)+char(115)+char(100)+char(98)+char(116)+char(101)+char(115)+char(116)'
,
Locale::canonicalize('char(119)+char(104)+char(115)+char(100)+char(98)+char(116)+char(101)+char(115)+char(116)')
возвращается null
,
Почему этот вход особенный? Это ошибка в PHP или ожидаемый, но недокументированный вывод?
Вот несколько примеров, которые я пробовал: https://gist.github.com/marcosdsanchez/e6603148f7c2257ba37d832cc40cb8f3
Вывод: работа как задумано.
canonicalize()
Функция принимает в качестве аргумента строку локали, а не поток символов произвольной длины. Исходный код PHP в ext/intl/intl_data.h
определяет максимальную длину строки локали, равную 80 символам:
#define INTL_MAX_LOCALE_LEN 80
Следующие функции используют это определение и принимают string $locale
в качестве аргумента и, таким образом, ограничены этим максимумом:
locale_get_primary_language()
locale_get_script()
locale_get_region()
locale_get_keywords()
locale_compose()
locale_parse()
locale_get_all_variants()
locale_get_all_variants()
locale_canonicalize()
locale_accept_from_http()
Других решений пока нет …