summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorRui Hirokawa <hirokawa@php.net>2001-01-08 02:39:52 +0000
committerRui Hirokawa <hirokawa@php.net>2001-01-08 02:39:52 +0000
commit63689331183be0995650432ee4cdc7196e305b67 (patch)
tree20349ab714d29a4966609825ef8c25c70b465f76 /ext/standard
parent75eea8ed1bee0adc0b9f14965cde8f778c5bb89f (diff)
downloadphp-git-63689331183be0995650432ee4cdc7196e305b67.tar.gz
added iconv_set_encoding() to change the encoding setting.
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/basic_functions.c1
-rw-r--r--ext/standard/php_string.h1
-rw-r--r--ext/standard/string.c28
3 files changed, 29 insertions, 1 deletions
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
/*