From: Rui Hirokawa Date: Mon, 8 Jan 2001 02:39:52 +0000 (+0000) Subject: added iconv_set_encoding() to change the encoding setting. X-Git-Tag: php-4.0.5RC1~676 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=63689331183be0995650432ee4cdc7196e305b67;p=php added iconv_set_encoding() to change the encoding setting. --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index da694a48d4..a59ed605f7 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -197,6 +197,7 @@ function_entry basic_functions[] = { #ifdef HAVE_ICONV PHP_FE(iconv, NULL) PHP_FE(ob_iconv_handler, NULL) + PHP_FE(iconv_set_encoding, NULL) #endif PHP_FE(parse_url, NULL) PHP_FE(urlencode, NULL) diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index da8a568954..ce6fce4a82 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -80,6 +80,7 @@ PHP_FUNCTION(str_pad); PHP_FUNCTION(sscanf); PHP_FUNCTION(iconv); PHP_FUNCTION(ob_iconv_handler); +PHP_FUNCTION(iconv_set_encoding); #define strnatcmp(a, b) \ strnatcmp_ex(a, strlen(a), b, strlen(b), 0) diff --git a/ext/standard/string.c b/ext/standard/string.c index 34dc4cf6e4..b422cf94c3 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -3050,7 +3050,6 @@ PHP_FUNCTION(iconv) zval **in_charset, **out_charset, **in_buffer; unsigned int in_size, out_size; char *out_buffer, *in_p, *out_p; - iconv_t cd; size_t result; typedef unsigned int ucs4_t; @@ -3096,6 +3095,33 @@ PHP_FUNCTION(ob_iconv_handler) } +/* {{{ proto bool iconv_set_encoding(string int_charset, string out_charset) + set internal encoding and output encoding for ob_iconv_handler(). +*/ +PHP_FUNCTION(iconv_set_encoding) +{ + zval **int_charset, **out_charset; + + if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &int_charset, &out_charset) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(int_charset); + convert_to_string_ex(out_charset); + + if (BG(iconv_internal_encoding)) { + free(BG(iconv_internal_encoding)); + } + BG(iconv_internal_encoding) = estrndup(Z_STRVAL_PP(int_charset),Z_STRLEN_PP(int_charset)); + + if (BG(iconv_output_encoding)) { + free(BG(iconv_output_encoding)); + } + BG(iconv_output_encoding) = estrndup(Z_STRVAL_PP(out_charset),Z_STRLEN_PP(out_charset)); + + RETURN_TRUE; +} + #endif /*