andrei Wed Nov 22 22:18:46 2006 UTC
Modified files:
/php-src/ext/standard html.c
Log:
Unicode support in get_html_translation_table().
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/html.c?r1=1.118&r2=1.119&diff_format=u
Index: php-src/ext/standard/html.c
diff -u php-src/ext/standard/html.c:1.118 php-src/ext/standard/html.c:1.119
--- php-src/ext/standard/html.c:1.118 Mon Nov 6 21:45:49 2006
+++ php-src/ext/standard/html.c Wed Nov 22 22:18:46 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: html.c,v 1.118 2006/11/06 21:45:49 andrei Exp $ */
+/* $Id: html.c,v 1.119 2006/11/22 22:18:46 andrei Exp $ */
/*
* HTML entity resources:
@@ -1383,7 +1383,7 @@
}
/* }}} */
-/* {{{ proto array get_html_translation_table([int table [, int quote_style]])
+/* {{{ proto array get_html_translation_table([int table [, int quote_style]])
U
Returns the internal translation table used by htmlspecialchars and
htmlentities */
PHP_FUNCTION(get_html_translation_table)
{
@@ -1391,11 +1391,18 @@
int i, j;
char ind[2];
enum entity_charset charset = determine_charset(NULL TSRMLS_CC);
+ UChar32 cp;
+ UChar key[3];
+ int key_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ll", &which,
"e_style) == FAILURE) {
return;
}
+ if (UG(unicode)) {
+ charset = cs_utf_8;
+ }
+
array_init(return_value);
ind[1] = 0;
@@ -1410,11 +1417,19 @@
if (entity_map[j].table[i] == NULL)
continue;
- /* what about wide chars here ?? */
- ind[0] = i + entity_map[j].basechar;
- sprintf(buffer, "&%s;",
entity_map[j].table[i]);
- add_assoc_string(return_value, ind,
buffer, 1);
+ if (UG(unicode)) {
+ cp = (UChar)(i +
entity_map[j].basechar);
+ key_len =
zend_codepoint_to_uchar(cp, key);
+ key[key_len] = 0;
+ sprintf(buffer, "&%s;",
entity_map[j].table[i]);
+
add_u_assoc_ascii_string_ex(return_value, IS_UNICODE, ZSTR(key), key_len+1,
buffer, 1);
+ } else {
+ /* no wide chars here, because
charset is always cs_8859_1 */
+ ind[0] = i +
entity_map[j].basechar;
+ sprintf(buffer, "&%s;",
entity_map[j].table[i]);
+ add_assoc_string(return_value,
ind, buffer, 1);
+ }
}
}
/* break thru */
@@ -1426,9 +1441,9 @@
continue;
ind[0] = (unsigned
char)basic_entities[j].charcode;
- add_assoc_stringl(return_value, ind,
basic_entities[j].entity, basic_entities[j].entitylen, 1);
+ add_ascii_assoc_ascii_stringl(return_value,
ind, basic_entities[j].entity, basic_entities[j].entitylen, 1);
}
- add_assoc_stringl(return_value, "&", "&",
sizeof("&") - 1, 1);
+ add_ascii_assoc_ascii_stringl(return_value, "&",
"&", sizeof("&") - 1, 1);
break;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php