Re: ctype_print returns false for British Pound symbol (and non-ASCII symbols)

From: Date: Fri, 26 Feb 2010 18:24:56 +0000
Subject: Re: ctype_print returns false for British Pound symbol (and non-ASCII symbols)
References: 1  Groups: php.i18n 
Request: Send a blank email to php-i18n+get-1376@lists.php.net to get a copy of this message
I doubt this has anything to do with PHP. The ctype functions are just direct wrappers for your native ctype calls. Try this: create a file called a.c: #include <stdio.h> #include <ctype.h> void main(int argc, char **argv) { printf("%d\n",isprint(*argv[1])); } Compile it with: make a Then try: 10:21am new:~> ./a £ 0 10:21am new:~> ./a $ 16384 Same result. My LOCALE doesn't think £ is printable, but $ is. Switch to dollars or fix your LOCALE. -Rasmus Bob wrote: > [I did post this to php.general, but I think php.i18n may be more > suitable.] > > In summary: ctype_print returns false for a string containing the British > Pound symbol, and I'm sure that's not how it should behave. > > 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? >

« previous php.i18n (#1376) next »