diff options
| author | Rui Hirokawa <hirokawa@php.net> | 2002-07-27 13:58:16 +0000 |
|---|---|---|
| committer | Rui Hirokawa <hirokawa@php.net> | 2002-07-27 13:58:16 +0000 |
| commit | fbbeaec63038ec44cc2cebe4726019dec245e259 (patch) | |
| tree | dcd48fc395ed56810301ef70a9217f19a0345ebc /ext/mbstring | |
| parent | 70d71846249b7d4172ea4275d2e371b6f321edb9 (diff) | |
| download | php-git-fbbeaec63038ec44cc2cebe4726019dec245e259.tar.gz | |
fixed: output encoding translation by mb_output_handler() in ext/mbstring was not usable when Content-Type is set by header().
Diffstat (limited to 'ext/mbstring')
| -rw-r--r-- | ext/mbstring/mbstring.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 1ab727123f..1dd682db32 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -1728,10 +1728,12 @@ PHP_FUNCTION(mb_output_handler) size_t arg_string_len; long arg_status; mbfl_string string, result; - const char *mimetype, *charset; + const char *charset; char *p; enum mbfl_no_encoding encoding; int last_feed, len; + unsigned char send_text_mimetype = 0; + char *s, *mimetype = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &arg_string, &arg_string_len, &arg_status) == FAILURE) { WRONG_PARAM_COUNT; @@ -1749,9 +1751,22 @@ PHP_FUNCTION(mb_output_handler) if (encoding == mbfl_no_encoding_pass) { RETURN_STRINGL(arg_string, arg_string_len, 1); } - /* if content-type is not yet set, set it and activate the converter */ - if (SG(sapi_headers).send_default_content_type ) { + + /* analyze mime type */ + if (SG(sapi_headers).mimetype && + strncmp(SG(sapi_headers).mimetype, "text/", 5) == 0) { + if ((s = strchr(SG(sapi_headers).mimetype,';')) == NULL){ + mimetype = estrdup(SG(sapi_headers).mimetype); + } else { + mimetype = estrndup(SG(sapi_headers).mimetype,s-SG(sapi_headers).mimetype); + } + send_text_mimetype = 1; + } else if (SG(sapi_headers).send_default_content_type) { mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE; + } + + /* if content-type is not yet set, set it and activate the converter */ + if (SG(sapi_headers).send_default_content_type || send_text_mimetype) { charset = mbfl_no2preferred_mime_name(encoding); if (charset) { len = (sizeof ("Content-Type:")-1) + strlen(mimetype) + (sizeof (";charset=")-1) + strlen(charset) + 1; @@ -1765,6 +1780,9 @@ PHP_FUNCTION(mb_output_handler) } /* activate the converter */ MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0 TSRMLS_CC); + if (send_text_mimetype){ + efree(mimetype); + } } } |
