PHP:\ Locale :: canonicalize中的意外返回值

时间:2017-10-31 16:15:57

标签: php intl

根据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

文档:http://php.net/manual/en/locale.canonicalize.php

1 个答案:

答案 0 :(得分:1)

结论:按设计工作。

canonicalize()函数将语言环境字符串作为参数,而不是任意长度的字符流。 ext/intl/intl_data.h中的PHP源定义了区域设置字符串的最大长度为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()