--- php5.3-200807230430,orig/ext/mbstring/mbstring.h 2008-07-18 01:34:43.000000000 +0900 +++ php5.3-200807230430/ext/mbstring/mbstring.h 2008-07-23 15:30:38.000000000 +0900 @@ -171,6 +171,7 @@ #endif /* ZEND_MULTIBYTE */ enum mbfl_no_encoding http_output_encoding; enum mbfl_no_encoding current_http_output_encoding; + int http_output_force_flag; enum mbfl_no_encoding http_input_identify; enum mbfl_no_encoding http_input_identify_get; enum mbfl_no_encoding http_input_identify_post; --- php5.3-200807230430,orig/ext/mbstring/mbstring.c 2008-07-18 05:34:31.000000000 +0900 +++ php5.3-200807230430/ext/mbstring/mbstring.c 2008-07-23 15:30:38.000000000 +0900 @@ -218,6 +218,7 @@ static ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_http_output, 0, 0, 0) ZEND_ARG_INFO(0, encoding) + ZEND_ARG_INFO(0, force_flag) ZEND_END_ARG_INFO() static @@ -1141,6 +1142,7 @@ #endif /* ZEND_MULTIBYTE */ mbstring_globals->http_output_encoding = mbfl_no_encoding_pass; mbstring_globals->current_http_output_encoding = mbfl_no_encoding_pass; + mbstring_globals->http_output_force_flag = 0; mbstring_globals->http_input_identify = mbfl_no_encoding_invalid; mbstring_globals->http_input_identify_get = mbfl_no_encoding_invalid; mbstring_globals->http_input_identify_post = mbfl_no_encoding_invalid; @@ -1287,6 +1289,7 @@ MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding); MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding); + MBSTRG(http_output_force_flag) = 0; MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode); MBSTRG(current_filter_illegal_substchar) = MBSTRG(filter_illegal_substchar); @@ -1373,6 +1376,9 @@ MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid; MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid; + /* clear http output force flag. */ + MBSTRG(http_output_force_flag) = 0; + /* clear overloaded function. */ if (MBSTRG(func_overload)){ p = &(mb_ovld[0]); @@ -1578,15 +1584,16 @@ } /* }}} */ -/* {{{ proto string mb_http_output([string encoding]) +/* {{{ proto string mb_http_output([string encoding[, bool force_flag]]) Sets the current output_encoding or returns the current output_encoding as a string */ PHP_FUNCTION(mb_http_output) { char *name = NULL; int name_len; enum mbfl_no_encoding no_encoding; + zend_bool force_flag = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", (char **)&name, &name_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", (char **)&name, &name_len, &force_flag) == FAILURE) { RETURN_FALSE; } @@ -1604,6 +1611,13 @@ RETURN_FALSE; } else { MBSTRG(current_http_output_encoding) = no_encoding; + + if (force_flag) { + MBSTRG(http_output_force_flag) = 1; + } else { + MBSTRG(http_output_force_flag) = 0; + } + RETURN_TRUE; } } @@ -1840,7 +1854,7 @@ /* analyze mime type */ if (SG(sapi_headers).mimetype && - strncmp(SG(sapi_headers).mimetype, "text/", 5) == 0) { + (strncmp(SG(sapi_headers).mimetype, "text/", 5) == 0 || MBSTRG(http_output_force_flag))) { if ((s = strchr(SG(sapi_headers).mimetype,';')) == NULL){ mimetype = estrdup(SG(sapi_headers).mimetype); } else {