rendered paste body/// ....basic_entities[] = { { '"', """, 6, ENT_HTML_QUOTE_DOUBLE }, { '\'', "'", 6, ENT_HTML_QUOTE_SINGLE }, { '\'', "'", 5, ENT_HTML_QUOTE_SINGLE }, { '<', "<", 4, 0 }, { '>', ">", 4, 0 }, { 0, NULL, 0, 0 }};/// ..../* {{{ php_escape_html_entities */PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC){ int i, j, maxlen, len; char *replaced; enum entity_charset charset = determine_charset(hint_charset TSRMLS_CC); int matches_map; maxlen = 2 * oldlen; if (maxlen < 128) maxlen = 128; replaced = emalloc (maxlen); len = 0; i = 0; while (i < oldlen) { unsigned char mbsequence[16]; /* allow up to 15 characters in a multibyte sequence */ int mbseqlen = sizeof(mbsequence); unsigned short this_char = get_next_char(charset, old, &i, mbsequence, &mbseqlen); matches_map = 0; if (len + 9 > maxlen) replaced = erealloc (replaced, maxlen += 128); if (all) { /* look for a match in the maps for this charset */ unsigned char *rep = NULL; for (j = 0; entity_map[j].charset != cs_terminator; j++) { if (entity_map[j].charset == charset && this_char >= entity_map[j].basechar && this_char <= entity_map[j].endchar) { rep = (unsigned char*)entity_map[j].table[this_char - entity_map[j].basechar]; if (rep == NULL) { /* there is no entity for this position; fall through and * just output the character itself */ break; } matches_map = 1; break; } } if (matches_map) { replaced[len++] = '&'; strcpy(replaced + len, rep); len += strlen(rep); replaced[len++] = ';'; } } if (!matches_map) { int is_basic = 0; if (this_char == '&') { memcpy(replaced + len, "&", sizeof("&") - 1); len += sizeof("&") - 1; is_basic = 1; } else { for (j = 0; basic_entities[j].charcode != 0; j++) { if ((basic_entities[j].charcode != this_char) || (basic_entities[j].flags && (quote_style & basic_entities[j].flags) == 0)) { continue; } memcpy(replaced + len, basic_entities[j].entity, basic_entities[j].entitylen); len += basic_entities[j].entitylen; is_basic = 1; break; } } if (!is_basic) { /* a wide char without a named entity; pass through the original sequence */ if (mbseqlen > 1) { memcpy(replaced + len, mbsequence, mbseqlen); len += mbseqlen; } else { replaced[len++] = (unsigned char)this_char; } } } } replaced[len] = '\0'; *newlen = len; return replaced;}/* }}} *//// ....