summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2003-05-08 15:39:24 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2003-05-08 15:39:24 +0000
commitee86979e21589ac90925737cf0ba548e4b3fb09d (patch)
tree30de44e1f7514c445f713ba42141ca0751ea67e8
parent1ba4e590ef87d123332ac45aa575c86fdde3e7d4 (diff)
downloadphp-git-ee86979e21589ac90925737cf0ba548e4b3fb09d.tar.gz
I should have tested more carefully..
-rw-r--r--ext/standard/html.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/ext/standard/html.c b/ext/standard/html.c
index 33549a8757..4955abf7aa 100644
--- a/ext/standard/html.c
+++ b/ext/standard/html.c
@@ -831,7 +831,8 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new
char *replaced, *ret, *p, *q, *lim, *next;
enum entity_charset charset = determine_charset(hint_charset TSRMLS_CC);
unsigned char replacement[15];
-
+ int replacement_len;
+
ret = estrdup(old);
retlen = oldlen;
if (!retlen) {
@@ -860,6 +861,7 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new
entity_length += 2;
/* When we have MBCS entities in the tables above, this will need to handle it */
+ replacement_len = 0;
switch (charset) {
case cs_8859_1:
case cs_cp1252:
@@ -869,19 +871,19 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new
case cs_cp866:
replacement[0] = k;
replacement[1] = '\0';
+ replacement_len = 1;
case cs_big5:
case cs_gb2312:
case cs_big5hkscs:
case cs_sjis:
case cs_eucjp:
- replacement[0] = (char)((unsigned int)k >> 8);
- replacement[1] = (k & 0xff);
- replacement[2] = '\0';
- break;
+ /* we cannot properly handle those multibyte encodings
+ * with php_str_to_str. skip it. */
+ continue;
case cs_utf_8:
- php_utf32_utf8(replacement, k);
+ replacement_len = php_utf32_utf8(replacement, k);
break;
default:
@@ -889,7 +891,7 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new
return 0;
}
- replaced = php_str_to_str(ret, retlen, entity, entity_length, replacement, 1, &retlen);
+ replaced = php_str_to_str(ret, retlen, entity, entity_length, replacement, replacement_len, &retlen);
efree(ret);
ret = replaced;
}