Bug #14655 Updated: ucwords failing randomly with international characters

From: Date: Mon, 17 Jun 2002 11:02:15 +0000
Subject: Bug #14655 Updated: ucwords failing randomly with international characters
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-10838@lists.php.net to get a copy of this message
ID: 14655 Updated by: hholzgra@php.net Reported By: xtango@netcombbs.com.ar -Status: Open +Status: Analyzed Bug Type: Strings related Operating System: Windows XP Pro (spanish) PHP Version: 4.1.0 -Assigned To: +Assigned To: hholzgra New Comment: setlocale() doesn't work well with multithreaded servers as the current locale is set globaly for all threads Previous Comments: ------------------------------------------------------------------------ [2002-04-21 06:24:41] bs_php@infeer.com Confirming your bug (PHP 4.1.2 on W2k) setlocale() on windows is the problem! See bug #16718 http://bugs.php.net/bug.php?id=16718 ------------------------------------------------------------------------ [2002-01-22 08:03:40] martin@humany.com Some additional comments: I cant reproduce this in Linux (meaning the returned data doesnt change), but with PHP 4.1.1 in Window XP the problem exists, but only when i change locale, my default locale is: LC_COLLATE=C;LC_CTYPE=English_United States.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C and the output here is: ÑÁéÍóúàèìòùäëÏöÜ With linux: Ñáéíóúàèìòùäëïöü But if i change locale with: setlocale(LC_ALL, "english"); (Locale: English_United States.1252) The returned data differs at each function call ------------------------------------------------------------------------ [2001-12-23 15:51:45] venaas@php.net To me this sounds like a system problem. PHP only uses the systems notion of upper and space. When the character following the international character it is probably because the international character is treated as a space by the system (isspace() returning true). It's quite weird that the results are not consistent. The PHP function itself is quite straightforward, so I suspect the locale is not the same every time, or that the systems isspace() and possibly toupper() is broken. I can't say for sure though. ------------------------------------------------------------------------ [2001-12-21 22:32:30] xtango@netcombbs.com.ar When using the ucwords() function with strings containing international characters, the function will return incorrect values. The return value will be different every time the function is called. I've seen bogus bug reports for this function so we have a slight chance for this to be yet another bogus bug, but look at this: echo setlocale(LC_ALL, "0"); Output: LC_COLLATE=C;LC_CTYPE=Spanish_Argentina.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C --- echo ucwords('ñáéíóúàèìòùäëïöü'); Output: ÑáéíóúÀèìÒùäËïÖü Output again (refresh button on browser): ÑáÉíóúàèìòùäëïöÜ Output again: ÑáéíÓúàèìÒùäëïöÜ etc. etc. Now, if I do setlocale(LC_ALL, "spanish"), the restult is still the same. I've noted that the problem is not the intl. char, but the char after that. This is, ucwords("cañas") will return "Cañas" or "CañAs", randomly. Scenario: Windows XP Pro (spanish) Apache 1.3.22 PHP 4.1.0 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=14655&edit=1

« previous php.bugs (#10838) next »