chinese patch for htmlspecialchars

From: Date: Wed, 21 Feb 2001 07:01:31 +0000
Subject: chinese patch for htmlspecialchars
Groups: php.dev 
Request: Send a blank email to php-dev+get-47120@lists.php.net to get a copy of this message
hi, Just tryed adding chinese parsing ability to html specialchars, If you do any webdev in php in chinese, it is one of the annoying 'missing features' Can somebody help finish this off, There are 2 issues, - I get compile time saying html.c:76: warning: comparison is always false due to limited range of data type (I'm not a C expert at all, is a (char *) expect to return < 127 ??)... - I have no idea what type of wrapper check to check for character set or locale Anyway heres the patch, If someone wants to comment on....... Index: html.c =================================================================== RCS file: /repository/php4/ext/standard/html.c,v retrieving revision 1.22 diff -u -r1.22 html.c --- html.c 2000/11/24 16:17:58 1.22 +++ html.c 2001/02/21 06:57:30 @@ -51,8 +51,8 @@ PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style) { - int i, maxlen, len; - char *new; + int i, maxlen, len, ischinese; + char *new, *oldnext, *oldprev; maxlen = 2 * oldlen; if (maxlen < 128) @@ -62,6 +62,35 @@ i = oldlen; while (i--) { + + /* needs some kind of if LC_CTYPE to check for encoding */ + /* if charset=chinese?? */ + /* check if this is the first character in a chinese pair */ + ischinese = 0; + if (i > 1) { + oldnext = old+1; + if ((*old >= 0xa1) && + (*old <= 0xf9) && + (((*oldnext >= 0x40) && + (*oldnext <= 0x73)) || + ((*oldnext >= 0xa1) && + (*oldnext <= 0xfe))) + ) ischinese = 1; + } + /* check if this is the seconde character in a chinese pair */ + if ((i != oldlen) && (!ischinese)) { + oldprev = old-1; + if ((*oldprev >= 0xa1) && + (*oldprev <= 0xf9) && + (((*old >= 0x40) && + (*old <= 0x73)) || + ((*old >= 0xa1) && + (*old <= 0xfe))) + ) ischinese = 1; + } + + if (!ischinese) { + if (len + 9 > maxlen) new = erealloc (new, maxlen += 128); if (38 == *old) { @@ -87,9 +116,13 @@ } else { new [len++] = *old; } - old++; + } else { + /* it is chinese - ignore it */ + new [len++] = *old; + } + old++; } - new [len] = '\0'; + new [len] = '\0'; *newlen = len; return new; -- Technical Director Linux Center (HK) Ltd. www.hklc.com

« previous php.dev (#47120) next »