Edit report at https://bugs.php.net/bug.php?id=60166&edit=1
ID: 60166 Updated by: f...@php.net Reported by: np dot viktorov at gmail dot com Summary: Locale::lookup() returns an empty string if the first arg is an empty array -Status: Open +Status: Analyzed Type: Bug Package: intl Operating System: Debian GNU/Linux 6.0.2 (squeeze) PHP Version: Irrelevant Block user comment: N Private report: N New Comment: RFC4647 (http://www.ietf.org/rfc/rfc4647.txt) states: 3.4.1. Default Values Each application, protocol, or specification that uses lookup MUST define the defaulting behavior when no tag matches the language priority list. What this action consists of strongly depends on how lookup is being applied. Some examples of defaulting behavior include: o return an item with no language tag or an item of a non-linguistic nature, such as an image or sound o return a null string as the language tag value, in cases where the protocol permits the empty value (see, for example, "xml:lang" in [XML10]) o return a particular language tag designated for the operation o return the language tag "i-default" (see [RFC2277]) o return an error condition or error message o return a list of available languages for the user to select from --------------------- So this *might* be classified "unexpected behavior" instead of a bug. The fix would probably be easy, PHP_5_3/ext/intl/locale_methods.c,1537 : »···if( !hash_arr || zend_hash_num_elements( hash_arr ) == 0 ) { »···»···RETURN_EMPTY_STRING(); »···} But as I have no clue what this would break, I will not change this now. Previous Comments: ------------------------------------------------------------------------ [2011-10-29 11:29:11] np dot viktorov at gmail dot com I forgot the INTL information. According to phpinfo() the INTL version information is this: - version 1.1.0 - ICU version 4.4.1 ------------------------------------------------------------------------ [2011-10-29 11:24:32] np dot viktorov at gmail dot com Description: ------------ Locale::lookup() will return an empty string if the first argument is an empty array() no matter that we have already set the default argument (argument #4) Test script: --------------- <?php $available = array(); $default = "en"; $requested = "eu-us"; $result = Locale::lookup($available, $requested, null, $default); var_dump($result); /* if we create atleast one element, for example "de" it will work fine */ Expected result: ---------------- According to the documentation we should expect to get "en" because this is the default locale provided as the fourth argument. This doesn't happen. Actual result: -------------- The actual result is "" (an empty string), not null, not false, just an empty string. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60166&edit=1