diff options
Diffstat (limited to 'ext/xml/xml.c')
-rw-r--r-- | ext/xml/xml.c | 398 |
1 files changed, 313 insertions, 85 deletions
diff --git a/ext/xml/xml.c b/ext/xml/xml.c index 299be2cfc3..f8127e8bd8 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP HTML Embedded Scripting Language Version 3.0 | +----------------------------------------------------------------------+ - | Copyright (c) 1997,1998 PHP Development Team (See Credits file) | + | Copyright (c) 1997-1999 PHP Development Team (See Credits file) | +----------------------------------------------------------------------+ | This program is free software; you can redistribute it and/or modify | | it under the terms of one of the following licenses: | @@ -23,7 +23,7 @@ | If you did not, or have any questions about PHP licensing, please | | contact core@php.net. | +----------------------------------------------------------------------+ - | Authors: Stig Sæther Bakken <ssb@guardian.no> | + | Authors: Stig Sæther Bakken <ssb@fast.no> | +----------------------------------------------------------------------+ */ @@ -109,13 +109,15 @@ static void xml_destroy_parser(xml_parser *); static void xml_set_handler(char **, pval *); inline static unsigned short xml_encode_iso_8859_1(unsigned char); inline static char xml_decode_iso_8859_1(unsigned short); -inline static unsigned short xml_encode_us_ascii(char); +inline static unsigned short xml_encode_us_ascii(unsigned char); inline static char xml_decode_us_ascii(unsigned short); static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *); static char *xml_utf8_decode(const XML_Char *, int, int *, const XML_Char *); static pval *xml_call_handler(xml_parser *, char *, int, pval **); static pval *php3i_xmlcharpval(const XML_Char *, int, const XML_Char *); static int php3i_xmlcharlen(const XML_Char *); +static void php3i_add_to_info(xml_parser *parser,char *name); + void php3i_xml_startElementHandler(void *, const char *, const char **); void php3i_xml_endElementHandler(void *, const char *); @@ -139,6 +141,7 @@ function_entry xml_functions[] = { PHP_FE(xml_set_notation_decl_handler, NULL) PHP_FE(xml_set_external_entity_ref_handler, NULL) PHP_FE(xml_parse, NULL) + PHP_FE(xml_parse_into_struct, NULL) PHP_FE(xml_get_error_code, NULL) PHP_FE(xml_error_string, NULL) PHP_FE(xml_get_current_line_number, NULL) @@ -229,6 +232,9 @@ int php3_minit_xml(INIT_FUNC_ARGS) REGISTER_LONG_CONSTANT("XML_OPTION_CASE_FOLDING", PHP3_XML_OPTION_CASE_FOLDING, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_OPTION_TARGET_ENCODING", PHP3_XML_OPTION_TARGET_ENCODING, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_TAGSTART", PHP3_XML_OPTION_SKIP_TAGSTART, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_WHITE", PHP3_XML_OPTION_SKIP_WHITE, CONST_CS|CONST_PERSISTENT); + return SUCCESS; } @@ -311,6 +317,9 @@ xml_destroy_parser(xml_parser *parser) if (parser->parser) { XML_ParserFree(parser->parser); } + if (parser->ltags) { + efree(parser->ltags); + } if (parser->startElementHandler) { efree(parser->startElementHandler); } @@ -403,7 +412,6 @@ xml_call_handler(xml_parser *parser, char *funcName, int argc, pval **argv) inline static unsigned short xml_encode_iso_8859_1(unsigned char c) { - php3_printf("c=%d ", c); return (unsigned short)c; } @@ -420,7 +428,7 @@ xml_decode_iso_8859_1(unsigned short c) /* {{{ xml_encode_us_ascii() */ inline static unsigned short -xml_encode_us_ascii(char c) +xml_encode_us_ascii(unsigned char c) { return (unsigned short)c; } @@ -459,7 +467,7 @@ xml_utf8_encode(const char *s, int len, int *newlen, const XML_Char *encoding) int pos = len; char *newbuf; unsigned short c; - unsigned short (*encoder)(char) = NULL; + unsigned short (*encoder)(unsigned char) = NULL; xml_encoding *enc = xml_get_encoding(encoding); *newlen = 0; @@ -511,7 +519,7 @@ static char * xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encoding) { int pos = len; - char *newbuf = emalloc(len); + char *newbuf = emalloc(len + 1); unsigned short c; char (*decoder)(unsigned short) = NULL; xml_encoding *enc = xml_get_encoding(encoding); @@ -526,6 +534,7 @@ xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encodin */ memcpy(newbuf, s, len); *newlen = len; + newbuf[*newlen] = '\0'; return newbuf; } while (pos > 0) { @@ -550,8 +559,9 @@ xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encodin ++*newlen; } if (*newlen < len) { - newbuf = erealloc(newbuf, *newlen); + newbuf = erealloc(newbuf, *newlen + 1); } + newbuf[*newlen] = '\0'; return newbuf; } /* }}} */ @@ -588,40 +598,125 @@ static int php3i_xmlcharlen(const XML_Char *s) } /* }}} */ - /* {{{ php3i_xml_startElementHandler() */ +/* {{{ php3i_add_to_info */ +static void php3i_add_to_info(xml_parser *parser,char *name) +{ + pval *element, values; + + if (! parser->info) { + return; + } + + if (_php3_hash_find(parser->info->value.ht,name,strlen(name) + 1,(void **) &element) == FAILURE) { + if (array_init(&values) == FAILURE) { + php3_error(E_ERROR, "Unable to initialize array"); + return; + } + + _php3_hash_update(parser->info->value.ht, name, strlen(name)+1, (void *) &values, sizeof(pval), (void **) &element); + } + + add_next_index_long(element,parser->curtag); + + + parser->curtag++; +} + +/* }}} */ +/* {{{ php3i_xml_startElementHandler() */ void php3i_xml_startElementHandler(void *userData, const char *name, const char **attributes) { xml_parser *parser = (xml_parser *)userData; + const char **attrs = attributes; XML_TLS_VARS; - if (parser && parser->startElementHandler) { + if (parser) { pval *retval, *args[3]; + parser->level++; + if (parser->case_folding) { name = _php3_strtoupper(estrdup(name)); } - args[0] = php3i_long_pval(parser->index); - args[1] = php3i_string_pval(name); - args[2] = emalloc(sizeof(pval)); - array_init(args[2]); - while (attributes && *attributes) { - char *key = (char *)attributes[0]; - char *value = (char *)attributes[1]; - if (parser->case_folding) { - key = _php3_strtoupper(estrdup(key)); + + if (parser->startElementHandler) { + args[0] = php3i_long_pval(parser->index); + args[1] = php3i_string_pval(name); + args[2] = emalloc(sizeof(pval)); + array_init(args[2]); + while (attributes && *attributes) { + char *key = (char *)attributes[0]; + char *value = (char *)attributes[1]; + char *decoded_value; + int decoded_len; + if (parser->case_folding) { + key = _php3_strtoupper(estrdup(key)); + } + decoded_value = xml_utf8_decode(value, strlen(value), + &decoded_len, + parser->target_encoding); + + add_assoc_string(args[2], key, decoded_value, 0); + if (parser->case_folding) { + efree(key); + } + attributes += 2; } - add_assoc_string(args[2], key, value, 1); - if (parser->case_folding) { - efree(key); + + if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) { + php3tls_pval_destructor(retval); + efree(retval); } - attributes += 2; - } - if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) { - php3tls_pval_destructor(retval); - efree(retval); + } + + if (parser->data) { + pval tag, atr; + int atcnt = 0; + + array_init(&tag); + array_init(&atr); + + php3i_add_to_info(parser,((char *) name) + parser->toffset); + + add_assoc_string(&tag,"tag",((char *) name) + parser->toffset,1); /* cast to avoid gcc-warning */ + add_assoc_string(&tag,"type","open",1); + add_assoc_long(&tag,"level",parser->level); + + parser->ltags[parser->level-1] = estrdup(name); + parser->lastwasopen = 1; + + attributes = attrs; + while (attributes && *attributes) { + char *key = (char *)attributes[0]; + char *value = (char *)attributes[1]; + char *decoded_value; + int decoded_len; + if (parser->case_folding) { + key = _php3_strtoupper(estrdup(key)); + } + decoded_value = xml_utf8_decode(value, strlen(value), + &decoded_len, + parser->target_encoding); + + add_assoc_stringl(&atr,key,decoded_value,decoded_len,0); + atcnt++; + if (parser->case_folding) { + efree(key); + } + attributes += 2; + } + + if (atcnt) { + _php3_hash_add(tag.value.ht,"attributes",sizeof("attributes"),&atr,sizeof(pval),NULL); + } else { + php3tls_pval_destructor(&atr); + } + + _php3_hash_next_index_insert(parser->data->value.ht,&tag,sizeof(pval),(void *) &parser->ctag); } + if (parser->case_folding) { efree((char *)name); } @@ -636,21 +731,50 @@ void php3i_xml_endElementHandler(void *userData, const char *name) xml_parser *parser = (xml_parser *)userData; XML_TLS_VARS; - if (parser && parser->endElementHandler) { + if (parser) { pval *retval, *args[2]; if (parser->case_folding) { name = _php3_strtoupper(estrdup(name)); } - args[0] = php3i_long_pval(parser->index); - args[1] = php3i_string_pval(name); - if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) { - php3tls_pval_destructor(retval); - efree(retval); + + if (parser->endElementHandler) { + args[0] = php3i_long_pval(parser->index); + args[1] = php3i_string_pval(name); + + if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) { + php3tls_pval_destructor(retval); + efree(retval); + } + } + + if (parser->data) { + pval tag; + + if (parser->lastwasopen) { + add_assoc_string(parser->ctag,"type","complete",1); + } else { + array_init(&tag); + + php3i_add_to_info(parser,((char *) name) + parser->toffset); + + add_assoc_string(&tag,"tag",((char *) name) + parser->toffset,1); /* cast to avoid gcc-warning */ + add_assoc_string(&tag,"type","close",1); + add_assoc_long(&tag,"level",parser->level); + + _php3_hash_next_index_insert(parser->data->value.ht,&tag,sizeof(pval),NULL); + } + + parser->lastwasopen = 0; } + if (parser->case_folding) { efree((char *)name); } + if (parser->ltags) { + efree(parser->ltags[parser->level-1]); + } + parser->level--; } } @@ -662,14 +786,60 @@ void php3i_xml_characterDataHandler(void *userData, const XML_Char *s, int len) xml_parser *parser = (xml_parser *)userData; XML_TLS_VARS; - if (parser && parser->characterDataHandler) { + if (parser) { pval *retval, *args[2]; - args[0] = php3i_long_pval(parser->index); - args[1] = php3i_xmlcharpval(s, len, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) { - php3tls_pval_destructor(retval); - efree(retval); + if (parser->characterDataHandler) { + args[0] = php3i_long_pval(parser->index); + args[1] = php3i_xmlcharpval(s, len, parser->target_encoding); + if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) { + php3tls_pval_destructor(retval); + efree(retval); + } + } + + if (parser->data) { + int i; + int doprint = 0; + + char *decoded_value; + int decoded_len; + + decoded_value = xml_utf8_decode(s,len,&decoded_len,parser->target_encoding); + for (i = 0; i < decoded_len; i++) { + switch (decoded_value[i]) { + case ' ': + case '\t': + case '\n': + continue; + default: + doprint = 1; + break; + } + if (doprint) { + break; + } + } + if (doprint || (! parser->skipwhite)) { + if (parser->lastwasopen) { + add_assoc_string(parser->ctag,"value",decoded_value,0); + } else { + pval tag; + + array_init(&tag); + + php3i_add_to_info(parser,parser->ltags[parser->level-1] + parser->toffset); + + add_assoc_string(&tag,"tag",parser->ltags[parser->level-1] + parser->toffset,1); + add_assoc_string(&tag,"value",decoded_value,0); + add_assoc_string(&tag,"type","cdata",1); + add_assoc_long(&tag,"level",parser->level); + + _php3_hash_next_index_insert(parser->data->value.ht,&tag,sizeof(pval),NULL); + } + } else { + efree(decoded_value); + } } } } @@ -813,8 +983,8 @@ php3i_xml_externalEntityRefHandler(XML_Parser parserPtr, /************************* EXTENSION FUNCTIONS *************************/ -/* {{{ int xml_parser_create() */ - +/* {{{ proto int xml_parser_create() + Create an XML parser */ PHP_FUNCTION(xml_parser_create) { xml_parser *parser; @@ -857,13 +1027,6 @@ PHP_FUNCTION(xml_parser_create) parser->parser = XML_ParserCreate(encoding); parser->target_encoding = encoding; XML_SetUserData(parser->parser, parser); - XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler); - XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler); - XML_SetProcessingInstructionHandler(parser->parser, php3i_xml_processingInstructionHandler); - XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler); - XML_SetUnparsedEntityDeclHandler(parser->parser, php3i_xml_unparsedEntityDeclHandler); - XML_SetNotationDeclHandler(parser->parser, php3i_xml_notationDeclHandler); - XML_SetExternalEntityRefHandler(parser->parser, php3i_xml_externalEntityRefHandler); id = php3_list_insert(parser, XML_GLOBAL(php3_xml_module).le_xml_parser); parser = xml_get_parser(id, thisfunc, list); parser->index = id; @@ -871,10 +1034,10 @@ PHP_FUNCTION(xml_parser_create) RETVAL_LONG(id); } - /* }}} */ -/* {{{ int xml_set_element_handler(int pind, string shdl, string ehdl) */ +/* {{{ proto int xml_set_element_handler(int pind, string shdl, string ehdl) + Set up start and end element handlers */ PHP_FUNCTION(xml_set_element_handler) { xml_parser *parser; @@ -894,12 +1057,13 @@ PHP_FUNCTION(xml_set_element_handler) } xml_set_handler(&parser->startElementHandler, shdl); xml_set_handler(&parser->endElementHandler, ehdl); + XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_set_character_data_handler(int pind, string hdl) */ +/* {{{ proto int xml_set_character_data_handler(int pind, string hdl) + Set up character data handler */ PHP_FUNCTION(xml_set_character_data_handler) { xml_parser *parser; @@ -916,12 +1080,13 @@ PHP_FUNCTION(xml_set_character_data_handler) RETURN_FALSE; } xml_set_handler(&parser->characterDataHandler, hdl); + XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_set_processing_instruction_handler(int pind, string hdl) */ +/* {{{ proto int xml_set_processing_instruction_handler(int pind, string hdl) + Set up processing instruction (PI) handler */ PHP_FUNCTION(xml_set_processing_instruction_handler) { xml_parser *parser; @@ -938,12 +1103,13 @@ PHP_FUNCTION(xml_set_processing_instruction_handler) RETURN_FALSE; } xml_set_handler(&parser->processingInstructionHandler, hdl); + XML_SetProcessingInstructionHandler(parser->parser, php3i_xml_processingInstructionHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_set_default_handler(int pind, string hdl) */ +/* {{{ proto int xml_set_default_handler(int pind, string hdl) + Set up default handler */ PHP_FUNCTION(xml_set_default_handler) { xml_parser *parser; @@ -960,12 +1126,13 @@ PHP_FUNCTION(xml_set_default_handler) RETURN_FALSE; } xml_set_handler(&parser->defaultHandler, hdl); + XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_set_unparsed_entity_decl_handler(int pind, string hdl) */ +/* {{{ proto int xml_set_unparsed_entity_decl_handler(int pind, string hdl) + Set up unparsed entity declaration handler */ PHP_FUNCTION(xml_set_unparsed_entity_decl_handler) { xml_parser *parser; @@ -982,12 +1149,13 @@ PHP_FUNCTION(xml_set_unparsed_entity_decl_handler) RETURN_FALSE; } xml_set_handler(&parser->unparsedEntityDeclHandler, hdl); + XML_SetUnparsedEntityDeclHandler(parser->parser, php3i_xml_unparsedEntityDeclHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_set_notation_decl_handler(int pind, string hdl) */ +/* {{{ proto int xml_set_notation_decl_handler(int pind, string hdl) + Set up notation declaration handler */ PHP_FUNCTION(xml_set_notation_decl_handler) { xml_parser *parser; @@ -1004,12 +1172,13 @@ PHP_FUNCTION(xml_set_notation_decl_handler) RETURN_FALSE; } xml_set_handler(&parser->notationDeclHandler, hdl); + XML_SetNotationDeclHandler(parser->parser, php3i_xml_notationDeclHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_set_external_entity_ref_handler(int pind, string hdl) */ +/* {{{ proto int xml_set_external_entity_ref_handler(int pind, string hdl) + Set up external entity reference handler */ PHP_FUNCTION(xml_set_external_entity_ref_handler) { xml_parser *parser; @@ -1026,12 +1195,13 @@ PHP_FUNCTION(xml_set_external_entity_ref_handler) RETURN_FALSE; } xml_set_handler(&parser->externalEntityRefHandler, hdl); + XML_SetExternalEntityRefHandler(parser->parser, php3i_xml_externalEntityRefHandler); RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_parse(int pind, string data[, int isFinal]) */ +/* {{{ proto int xml_parse(int pind, string data[, int isFinal]) + Start parsing an XML document */ PHP_FUNCTION(xml_parse) { xml_parser *parser; @@ -1055,14 +1225,64 @@ PHP_FUNCTION(xml_parse) if (parser == NULL) { RETURN_FALSE; } - fflush(stdout); + /* fflush(stdout); uups, that can't be serious?!?!?*/ ret = XML_Parse(parser->parser, data->value.str.val, data->value.str.len, isFinal); RETVAL_LONG(ret); } /* }}} */ -/* {{{ int xml_get_error_code(int pind) */ +/* {{{ proto int xml_parse_into_struct(int pind, string data,array &struct,array &index) + Parsing a XML document */ + +PHP_FUNCTION(xml_parse_into_struct) +{ + xml_parser *parser; + pval *pind, *data, *xdata,*info = 0; + int argc, ret; + XML_TLS_VARS; + + argc = ARG_COUNT(ht); + if (getParameters(ht, 4, &pind, &data, &xdata,&info) == SUCCESS) { + if (!ParameterPassedByReference(ht, 4)) { + php3_error(E_WARNING, "Array to be filled with values must be passed by reference."); + RETURN_FALSE; + } + array_init(info); + } else if (getParameters(ht, 3, &pind, &data, &xdata) == FAILURE) { + WRONG_PARAM_COUNT; + } + + if (!ParameterPassedByReference(ht, 3)) { + php3_error(E_WARNING, "Array to be filled with values must be passed by reference."); + RETURN_FALSE; + } + + convert_to_long(pind); + convert_to_string(data); + array_init(xdata); + + parser = xml_get_parser(pind->value.lval, "XML_Parse_Into_Struct", list); + if (parser == NULL) { + RETURN_FALSE; + } + + parser->data = xdata; + parser->info = info; + parser->level = 0; + parser->ltags = emalloc(XML_MAXLEVEL * sizeof(char *)); + + XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler); + XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler); + XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler); + + ret = XML_Parse(parser->parser, data->value.str.val, data->value.str.len, 1); + + RETVAL_LONG(ret); +} +/* }}} */ +/* {{{ proto int xml_get_error_code(int pind) + Get XML parser error code */ PHP_FUNCTION(xml_get_error_code) { xml_parser *parser; @@ -1079,10 +1299,10 @@ PHP_FUNCTION(xml_get_error_code) } RETVAL_LONG((long)XML_GetErrorCode(parser->parser)); } - /* }}} */ -/* {{{ string xml_error_string(int code) */ +/* {{{ proto string xml_error_string(int code) + Get XML parser error string */ PHP_FUNCTION(xml_error_string) { pval *code; @@ -1098,10 +1318,10 @@ PHP_FUNCTION(xml_error_string) RETVAL_STRING(str, 1); } } - /* }}} */ -/* {{{ int xml_get_current_line_number(int pind) */ +/* {{{ proto int xml_get_current_line_number(int pind) + Get current line number for an XML parser */ PHP_FUNCTION(xml_get_current_line_number) { xml_parser *parser; @@ -1118,10 +1338,11 @@ PHP_FUNCTION(xml_get_current_line_number) } RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser)); } - /* }}} */ -/* {{{ int xml_get_current_column_number(int pind) */ +/* {{{ proto int xml_get_current_column_number(int pind) + Get current column number for an XML parser +*/ PHP_FUNCTION(xml_get_current_column_number) { xml_parser *parser; @@ -1138,10 +1359,10 @@ PHP_FUNCTION(xml_get_current_column_number) } RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser)); } - /* }}} */ -/* {{{ int xml_get_current_byte_index(int pind) */ +/* {{{ proto int xml_get_current_byte_index(int pind) + Get current byte index for an XML parser */ PHP_FUNCTION(xml_get_current_byte_index) { xml_parser *parser; @@ -1158,10 +1379,10 @@ PHP_FUNCTION(xml_get_current_byte_index) } RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser)); } - /* }}} */ -/* {{{ int xml_parser_free(int pind) */ +/* {{{ proto int xml_parser_free(int pind) + Free an XML parser */ PHP_FUNCTION(xml_parser_free) { pval *pind; @@ -1176,10 +1397,10 @@ PHP_FUNCTION(xml_parser_free) } RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_parser_set_option(int pind, int option, mixed value) */ +/* {{{ proto int xml_parser_set_option(int pind, int option, mixed value) + Set options in an XML parser */ PHP_FUNCTION(xml_parser_set_option) { xml_parser *parser; @@ -1201,6 +1422,14 @@ PHP_FUNCTION(xml_parser_set_option) convert_to_long(val); parser->case_folding = val->value.lval; break; + case PHP3_XML_OPTION_SKIP_TAGSTART: + convert_to_long(val); + parser->toffset = val->value.lval; + break; + case PHP3_XML_OPTION_SKIP_WHITE: + convert_to_long(val); + parser->skipwhite = val->value.lval; + break; case PHP3_XML_OPTION_TARGET_ENCODING: { xml_encoding *enc = xml_get_encoding(val->value.str.val); if (enc == NULL) { @@ -1218,10 +1447,10 @@ PHP_FUNCTION(xml_parser_set_option) } RETVAL_TRUE; } - /* }}} */ -/* {{{ int xml_parser_get_option(int pind, int option) */ +/* {{{ proto int xml_parser_get_option(int pind, int option) + Get options from an XML parser */ PHP_FUNCTION(xml_parser_get_option) { xml_parser *parser; @@ -1252,10 +1481,10 @@ PHP_FUNCTION(xml_parser_get_option) } RETVAL_FALSE; } - /* }}} */ -/* {{{ string utf8_encode(string data) */ +/* {{{ proto string utf8_encode(string data) + Encodes an ISO-8859-1 string to UTF-8 */ PHP_FUNCTION(utf8_encode) { pval *arg; @@ -1273,10 +1502,10 @@ PHP_FUNCTION(utf8_encode) } RETVAL_STRINGL(encoded, len, 0); } - /* }}} */ -/* {{{ string utf8_decode(string data) */ +/* {{{ proto string utf8_decode(string data) + Converts a UTF-8 encoded string to ISO-8859-1 */ PHP_FUNCTION(utf8_decode) { pval *arg; @@ -1294,7 +1523,6 @@ PHP_FUNCTION(utf8_decode) } RETVAL_STRINGL(decoded, len, 0); } - /* }}} */ #endif |