Re: ctype_print, the British Pound and other non-ASCII characters

[email protected] (Nathan Rixham)
Newsgroups php.general
Message-ID <[email protected]>
Bob wrote:
> I'm seeing mischief from ctype_print.
> 
> So far as I can tell, the British Pound symbol, '£' is considered a 
> printable character according to the locale I use on my Ubuntu box. But 
> even across two years, two boxes, several versions of Ubuntu (from 7.04 
> to 9.10, one x86, one AMD64), and two major versions of PHP (PHP 4 and 
> now PHP 5.2.11), I cannot get ctype_print to return true when a string 
> given to it contains the British Pound symbol. (Or other non-ASCII 
> characters such as ø or ß.)
> 
> The locale I'm using is en_GB.UTF-8 and when I call setlocale(LC_ALL, 
> 'en_GB.UTF-8') in PHP, it returns the name of this locale rather than 
> FALSE, so that seems to be in order. (However, to be sure I have 
> installed and reinstalled the language pack in Ubuntu as suggested by 
> others.)
> 
> I've even read through the en_GB and i18n locale definition files to 
> confirm that <U00A3> (for the British Pound symbol) does appear within 
> the print and graph sections, so both ctype_print and ctype_graph should 
> consider it acceptable.
> 
> What's most maddening is that ctype_print does return true on my shared 
> hosting server, so I know that it can be achieved. I'm just hoping that 
> someone here can tell me what I'm doing wrong, or what my operating 
> system is doing wrong.
> 
> For your information, I'm currently running the following:
> 
> Ubuntu 9.10 (AMD64)
> Apache 2.2.14
> PHP 5.2.11 running as a CGI (to mirror the config of my shared host)
> Locale in use: en_GB.UTF-8
> LANG=en_GB.UTF-8
> 
> Can anyone tell me how to get ctype_print to behave?

Tested on a few ubuntu boxes (8&9s) and:

When using en_US.utf8 all is fine

var_dump( ctype_print( 'abcd ef £ ghs als kl ,!' ) ); // TRUE

then:

# locale-gen en_GB.UTF-8
Generating locales...
  en_GB.UTF-8... done
Generation complete.

# locale -a
C
en_GB.utf8
en_US
en_US.utf8
POSIX

setlocale(LC_ALL, 'en_GB.UTF-8');
var_dump( ctype_print( 'abcd ef £ ghs als kl ,!' ) ); // FALSE

wondering if this is a PHP issue or a mapping generation issue on ubuntu..

have you checked the output of #locale to ensure LC_CTYPE is set to the
appropriate value?

regards!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.