#if HAVE_MBREGEX
static unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
#endif
-#if defined(MBSTR_ENC_TRANS)
-SAPI_POST_HANDLER_FUNC(php_mbstr_post_handler);
static sapi_post_entry mbstr_post_entries[] = {
{ DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_mbstr_post_handler },
{ MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler },
{ NULL, 0, NULL, NULL }
};
-#endif
static struct mb_overload_def mb_ovld[] = {
{MB_OVERLOAD_MAIL, "mail", "mb_send_mail", "mb_orig_mail"},
#endif /* ZEND_MULTIBYTE */
PHP_INI_ENTRY("mbstring.substitute_character", NULL, PHP_INI_ALL, OnUpdate_mbstring_substitute_character)
STD_PHP_INI_ENTRY("mbstring.func_overload", "0", PHP_INI_SYSTEM, OnUpdateInt, func_overload, zend_mbstring_globals, mbstring_globals)
+#if !defined(COMPILE_DL_MBSTRING)
+ STD_PHP_INI_BOOLEAN("mbstring.encoding_translation", "0", PHP_INI_SYSTEM, OnUpdateBool, encoding_translation, zend_mbstring_globals, mbstring_globals)
+#endif /* !defined(COMPILE_DL_MBSTRING) */
PHP_INI_END()
MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
MBSTRG(current_filter_illegal_substchar) = 0x3f; /* '?' */
MBSTRG(func_overload) = 0;
+ MBSTRG(encoding_translation) = 0;
pglobals->outconv = NULL;
#if HAVE_MBREGEX
MBSTRG(default_mbctype) = MBCTYPE_EUC;
REGISTER_INI_ENTRIES();
-#if defined(MBSTR_ENC_TRANS)
- sapi_unregister_post_entry(mbstr_post_entries);
- sapi_register_post_entries(mbstr_post_entries);
-#endif
+
+ if(MBSTRG(encoding_translation)) {
+ sapi_unregister_post_entry(mbstr_post_entries);
+ sapi_register_post_entries(mbstr_post_entries);
+ sapi_register_treat_data(mbstr_treat_data);
+ }
REGISTER_LONG_CONSTANT("MB_OVERLOAD_MAIL", MB_OVERLOAD_MAIL, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("MB_OVERLOAD_STRING", MB_OVERLOAD_STRING, CONST_CS | CONST_PERSISTENT);
free(MBSTRG(detect_order_list));
}
+ if(MBSTRG(encoding_translation)) {
+ sapi_register_treat_data(php_default_treat_data);
+ }
+
#if HAVE_MBREGEX
zend_hash_destroy(&MBSTRG(ht_rc));
#endif
#if defined(HAVE_MBSTR_KR)
php_info_print_table_row(2, "korean support", "enabled");
#endif
-#if defined(MBSTR_ENC_TRANS)
- php_info_print_table_row(2, "http input encoding translation", "enabled");
-#endif
+ if(MBSTRG(encoding_translation)) {
+ php_info_print_table_row(2, "http input encoding translation", "enabled");
+ }
#if defined(HAVE_MBREGEX)
php_info_print_table_row(2, "multibyte (japanese) regex support", "enabled");
#endif
}
/* }}} */
-#if defined(MBSTR_ENC_TRANS)
static void
php_mbstr_encoding_handler(zval *arg, char *res, char *separator TSRMLS_DC)
{
}
/* http input processing */
-void mbstr_treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
+SAPI_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
{
char *res = NULL, *separator=NULL;
const char *c_var;
efree(res);
}
}
-#endif
/* {{{ proto bool mb_parse_str(string encoded_string [, array result])
Parses GET/POST/COOKIE data and sets global variables */
}
/* }}} */
+PHPAPI int mbstr_encoding_translation(TSRMLS_DC) {
+ return MBSTRG(encoding_translation);
+}
#ifdef ZEND_MULTIBYTE
PHPAPI int php_mbstring_set_zend_encoding(TSRMLS_D)
encoding_converter = NULL;
multibyte_oddlen = php_mbstring_oddlen;
-#if defined(MBSTR_ENC_TRANS)
- /* notify internal encoding to Zend Engine */
- name = (char*)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
- zend_multibyte_set_internal_encoding(name, strlen(name) TSRMLS_CC);
+ if(MBSTRG(encoding_translation)) {
+ /* notify internal encoding to Zend Engine */
+ name = (char*)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
+ zend_multibyte_set_internal_encoding(name, strlen(name) TSRMLS_CC);
- encoding_converter = php_mbstring_encoding_converter;
-#endif /* defined(MBSTR_ENC_TRANS) */
+ encoding_converter = php_mbstring_encoding_converter;
+ }
zend_multibyte_set_functions(encoding_detector, encoding_converter,
multibyte_oddlen TSRMLS_CC);
#if HAVE_MBSTRING
#include "mbfilter.h"
+#include "SAPI.h"
#define PHP_MBSTRING_API 20020405
char *mbstr_strrchr(const char *s, char c TSRMLS_DC);
int mbstr_is_mb_leadbyte(const char *s TSRMLS_DC);
+int mbstr_encoding_translation(TSRMLS_DC) ;
ZEND_BEGIN_MODULE_GLOBALS(mbstring)
int language;
int current_filter_illegal_mode;
int current_filter_illegal_substchar;
long func_overload;
+ int encoding_translation;
mbfl_buffer_converter *outconv;
#if HAVE_MBREGEX
int default_mbctype;
int php_mbstring_oddlen(char *string, int length, const char *encoding TSRMLS_DC);
#endif /* ZEND_MULTIBYTE */
+SAPI_POST_HANDLER_FUNC(php_mbstr_post_handler);
+SAPI_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data);
+
#else /* HAVE_MBSTRING */
#define mbstring_module_ptr NULL
old_rg = PG(register_globals);
if(argCount == 1) {
PG(register_globals) = 1;
- php_treat_data(PARSE_STRING, res, NULL TSRMLS_CC);
+ sapi_module.treat_data(PARSE_STRING, res, NULL TSRMLS_CC);
} else {
PG(register_globals) = 0;
/* Clear out the array that was passed in. */
zval_dtor(*arrayArg);
array_init(*arrayArg);
- php_treat_data(PARSE_STRING, res, *arrayArg TSRMLS_CC);
+ sapi_module.treat_data(PARSE_STRING, res, *arrayArg TSRMLS_CC);
}
PG(register_globals) = old_rg;
}
}
+SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC))
+{
+ sapi_module.treat_data = treat_data;
+ return SUCCESS;
+}
+
+
SAPI_API int sapi_flush(TSRMLS_D)
{
if (sapi_module.flush) {
SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry);
SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry);
SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D));
+SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC));
SAPI_API int sapi_flush(TSRMLS_D);
SAPI_API struct stat *sapi_get_stat(TSRMLS_D);
void (*unblock_interruptions)(void);
void (*default_post_reader)(TSRMLS_D);
+ void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC);
char *executable_location;
};
#define SAPI_POST_READER_FUNC(post_reader) void post_reader(TSRMLS_D)
#define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg TSRMLS_DC)
+#define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
+
SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
+SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data);
#define STANDARD_SAPI_MODULE_PROPERTIES NULL, NULL
case 'p':
case 'P':
if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, "POST")) {
- php_treat_data(PARSE_POST, NULL, NULL TSRMLS_CC); /* POST Data */
+ sapi_module.treat_data(PARSE_POST, NULL, NULL TSRMLS_CC); /* POST Data */
_gpc_flags[0]=1;
}
break;
case 'c':
case 'C':
if (!_gpc_flags[1]) {
- php_treat_data(PARSE_COOKIE, NULL, NULL TSRMLS_CC); /* Cookie Data */
+ sapi_module.treat_data(PARSE_COOKIE, NULL, NULL TSRMLS_CC); /* Cookie Data */
_gpc_flags[1]=1;
}
break;
case 'g':
case 'G':
if (!_gpc_flags[2]) {
- php_treat_data(PARSE_GET, NULL, NULL TSRMLS_CC); /* GET Data */
+ sapi_module.treat_data(PARSE_GET, NULL, NULL TSRMLS_CC); /* GET Data */
_gpc_flags[2]=1;
}
break;
{
sapi_register_post_entries(php_post_entries);
sapi_register_default_post_reader(php_default_post_reader);
+ sapi_register_treat_data(php_default_treat_data);
return SUCCESS;
}
/* }}} */
extern int php_init_environ(void);
extern int php_shutdown_environ(void);
-#if defined(MBSTR_ENC_TRANS)
-#define php_treat_data mbstr_treat_data
-#endif
-
#endif
}
}
-
-void php_treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
+SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data)
{
char *res = NULL, *var, *val, *separator=NULL;
const char *c_var;
#include "php_variables.h"
#include "rfc1867.h"
-#if HAVE_MBSTRING && MBSTR_ENC_TRANS && !defined(COMPILE_DL_MBSTRING)
+#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
#include "ext/mbstring/mbstring.h"
#endif
*resp++ = start[++i];
} else {
*resp++ = start[i];
-#if HAVE_MBSTRING && MBSTR_ENC_TRANS && !defined(COMPILE_DL_MBSTRING)
- if (mbstr_is_mb_leadbyte(start+i TSRMLS_CC)) {
+#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
+ if (mbstr_encoding_translation(TSRMLS_CC) &&
+ mbstr_is_mb_leadbyte(start+i TSRMLS_CC)) {
*resp++ = start[++i];
}
#endif
sprintf(lbuf, "%s_name", param);
}
-#if HAVE_MBSTRING && MBSTR_ENC_TRANS && !defined(COMPILE_DL_MBSTRING)
- s = mbstr_strrchr(filename, '\\' TSRMLS_CC);
+#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
+ if (mbstr_encoding_translation(TSRMLS_CC)) {
+ s = mbstr_strrchr(filename, '\\' TSRMLS_CC);
+ } else {
+ s = strrchr(filename, '\\');
+ }
#else
s = strrchr(filename, '\\');
#endif