PHP_NAMED_FE(printf, PHP_FN(user_printf), NULL)
PHP_FE(sscanf, third_and_rest_force_ref)
PHP_FE(fscanf, third_and_rest_force_ref)
-#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)
PHP_FE(urldecode, NULL)
return SUCCESS;
}
-#ifdef HAVE_ICONV
-static PHP_INI_MH(OnUpdateIconvOutputEncoding)
-{
- BLS_FETCH();
-
- if (BG(iconv_output_encoding)) {
- free(BG(iconv_output_encoding));
- }
- BG(iconv_output_encoding) = zend_strndup(new_value, new_value_length);
- return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdateIconvInternalEncoding)
-{
- BLS_FETCH();
-
- if (BG(iconv_internal_encoding)) {
- free(BG(iconv_internal_encoding));
- }
- BG(iconv_internal_encoding) = zend_strndup(new_value, new_value_length);
- return SUCCESS;
-}
-
-#endif
-
PHP_INI_BEGIN()
PHP_INI_ENTRY_EX("safe_mode_protected_env_vars", SAFE_MODE_PROTECTED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeProtectedEnvVars, NULL)
PHP_INI_ENTRY_EX("safe_mode_allowed_env_vars", SAFE_MODE_ALLOWED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeAllowedEnvVars, NULL)
-#ifdef HAVE_ICONV
- PHP_INI_ENTRY_EX("iconv.output_encoding", ICONV_OUTPUT_ENCODING, PHP_INI_SYSTEM, OnUpdateIconvOutputEncoding, NULL)
- PHP_INI_ENTRY_EX("iconv.internal_encoding", ICONV_INTERNAL_ENCODING, PHP_INI_SYSTEM, OnUpdateIconvInternalEncoding, NULL)
-#endif
STD_PHP_INI_ENTRY("session.use_trans_sid", "1", PHP_INI_ALL, OnUpdateBool, use_trans_sid, php_basic_globals, basic_globals)
PHP_INI_END()
#ifdef HAVE_LOCALE_H
# include <locale.h>
#endif
-#ifdef HAVE_ICONV
-# include <iconv.h>
-# include "SAPI.h"
-#endif
#include "scanf.h"
#include "zend_API.h"
#include "zend_execute.h"
}
int php_tag_find(char *tag, int len, char *set);
-int php_iconv_string(char *, char **, char *, char *);
/* this is read-only, so it's ok */
static char hexconvtab[] = "0123456789abcdef";
}
/* }}} */
-#ifdef HAVE_ICONV
-
-int php_iconv_string(char *in_p, char **out, char *in_charset, char *out_charset) {
- unsigned int in_size, out_size;
- char *out_buffer, *out_p;
- iconv_t cd;
- size_t result;
- typedef unsigned int ucs4_t;
-
- in_size = strlen(in_p) * sizeof(char) + 1;
- out_size = strlen(in_p) * sizeof(ucs4_t) + 1;
-
- out_buffer = (char *) emalloc(out_size);
- *out = out_buffer;
- out_p = out_buffer;
-
- cd = iconv_open(out_charset, in_charset);
-
- if (cd == (iconv_t)(-1)) {
- php_error(E_WARNING, "iconv: cannot convert from `%s' to `%s'",
- in_charset, out_charset);
- efree(out_buffer);
- return -1;
- }
-
- result = iconv(cd, (const char **) &in_p, &in_size, (char **)
- &out_p, &out_size);
-
- if (result == (size_t)(-1)) {
- sprintf(out_buffer, "???") ;
- return -1;
- }
-
- iconv_close(cd);
-
- return SUCCESS;
-}
-
-/* {{{ proto string iconv(string in_charset, string out_charset, string str)
- Returns str converted to the out_charset character set.
-*/
-PHP_FUNCTION(iconv)
-{
- zval **in_charset, **out_charset, **in_buffer;
- unsigned int in_size, out_size;
- char *out_buffer, *in_p, *out_p;
- size_t result;
- typedef unsigned int ucs4_t;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &in_charset, &out_charset, &in_buffer) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(in_charset);
- convert_to_string_ex(out_charset);
- convert_to_string_ex(in_buffer);
-
- if (php_iconv_string(Z_STRVAL_PP(in_buffer), &out_buffer,
- Z_STRVAL_PP(in_charset), Z_STRVAL_PP(out_charset)) == SUCCESS) {
- RETVAL_STRING(out_buffer, 0);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* {{{ proto string ob_iconv_handler(string contents)
- Returns str in output buffer converted to the iconv.output_encoding
- character set.
-*/
-PHP_FUNCTION(ob_iconv_handler)
-{
- int coding;
- char *out_buffer;
- zval **zv_string;
- BLS_FETCH();
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &zv_string)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (php_iconv_string(Z_STRVAL_PP(zv_string), &out_buffer,
- BG(iconv_internal_encoding),
- BG(iconv_output_encoding))==SUCCESS) {
- RETVAL_STRING(out_buffer, 0);
- } else {
- zval_dtor(return_value);
- *return_value = **zv_string;
- zval_copy_ctor(return_value);
- }
-
-}
-
-/* {{{ 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;
- BLS_FETCH();
-
- 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
-
/*
* Local variables:
* tab-width: 4