From: Yasuo Ohgaki Date: Thu, 13 Feb 2014 02:54:52 +0000 (+0900) Subject: Implement RFC https://wiki.php.net/rfc/default_encoding X-Git-Tag: php-5.6.0alpha3~1^2~102 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbd108abf19d9fb9ae1d4ccd153215f56a2763e8;p=php Implement RFC https://wiki.php.net/rfc/default_encoding --- diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index ea6ac1a1f1..87ad5eeaab 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -220,21 +220,55 @@ static char _generic_superset_name[] = ICONV_UCS4_ENCODING; #define GENERIC_SUPERSET_NBYTES 4 /* }}} */ -static PHP_INI_MH(OnUpdateStringIconvCharset) + +static PHP_INI_MH(OnUpdateInputEncoding) +{ + if (new_value_length >= ICONV_CSNMAXLEN) { + return FAILURE; + } + if (new_value_length) { + OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } else { + OnUpdateString(entry, PG(input_encoding), strlen(PG(input_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } + return SUCCESS; +} + + +static PHP_INI_MH(OnUpdateOutputEncoding) { if(new_value_length >= ICONV_CSNMAXLEN) { return FAILURE; } - OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + if (new_value_length) { + OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } else { + OnUpdateString(entry, PG(output_encoding), strlen(PG(output_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } return SUCCESS; } + +static PHP_INI_MH(OnUpdateInternalEncoding) +{ + if(new_value_length >= ICONV_CSNMAXLEN) { + return FAILURE; + } + if (new_value_length) { + OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } else { + OnUpdateString(entry, PG(internal_encoding), strlen(PG(internal_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } + return SUCCESS; +} + + /* {{{ PHP_INI */ PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("iconv.input_encoding", ICONV_INPUT_ENCODING, PHP_INI_ALL, OnUpdateStringIconvCharset, input_encoding, zend_iconv_globals, iconv_globals) - STD_PHP_INI_ENTRY("iconv.output_encoding", ICONV_OUTPUT_ENCODING, PHP_INI_ALL, OnUpdateStringIconvCharset, output_encoding, zend_iconv_globals, iconv_globals) - STD_PHP_INI_ENTRY("iconv.internal_encoding", ICONV_INTERNAL_ENCODING, PHP_INI_ALL, OnUpdateStringIconvCharset, internal_encoding, zend_iconv_globals, iconv_globals) + STD_PHP_INI_ENTRY("iconv.input_encoding", "", PHP_INI_ALL, OnUpdateInputEncoding, input_encoding, zend_iconv_globals, iconv_globals) + STD_PHP_INI_ENTRY("iconv.output_encoding", "", PHP_INI_ALL, OnUpdateOutputEncoding, output_encoding, zend_iconv_globals, iconv_globals) + STD_PHP_INI_ENTRY("iconv.internal_encoding", "", PHP_INI_ALL, OnUpdateInternalEncoding, internal_encoding, zend_iconv_globals, iconv_globals) PHP_INI_END() /* }}} */ diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h index 26e3f3b2a6..1389d7a993 100644 --- a/ext/iconv/php_iconv.h +++ b/ext/iconv/php_iconv.h @@ -79,15 +79,9 @@ ZEND_END_MODULE_GLOBALS(iconv) #endif #ifdef HAVE_IBM_ICONV -# define ICONV_INPUT_ENCODING "ISO8859-1" -# define ICONV_OUTPUT_ENCODING "ISO8859-1" -# define ICONV_INTERNAL_ENCODING "ISO8859-1" # define ICONV_ASCII_ENCODING "IBM-850" # define ICONV_UCS4_ENCODING "UCS-4" #else -# define ICONV_INPUT_ENCODING "ISO-8859-1" -# define ICONV_OUTPUT_ENCODING "ISO-8859-1" -# define ICONV_INTERNAL_ENCODING "ISO-8859-1" # define ICONV_ASCII_ENCODING "ASCII" # define ICONV_UCS4_ENCODING "UCS-4LE" #endif diff --git a/ext/iconv/tests/iconv_ini_encoding.phpt b/ext/iconv/tests/iconv_ini_encoding.phpt new file mode 100644 index 0000000000..b9a69824e1 --- /dev/null +++ b/ext/iconv/tests/iconv_ini_encoding.phpt @@ -0,0 +1,68 @@ +--TEST-- +Encoding INI test +--SKIPIF-- + +--INI-- +default_charset=ISO-8859-1 +internal_encoding= +input_encoding= +output_encoding= +iconv.internal_encoding=ISO-8859-1 +iconv.http_input=ISO-8859-1 +iconv.http_output=ISO-8859-1 +--FILE-- +no_encoding; + /* these are not needed. convd has encoding info. + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + */ string.val = (unsigned char *)arg_string; string.len = arg_string_len; mbfl_buffer_converter_feed(MBSTRG(outconv), &string); diff --git a/ext/mbstring/tests/ini_encoding.phpt b/ext/mbstring/tests/ini_encoding.phpt new file mode 100644 index 0000000000..79a0f3aad4 --- /dev/null +++ b/ext/mbstring/tests/ini_encoding.phpt @@ -0,0 +1,73 @@ +--TEST-- +Encoding INI test +--SKIPIF-- + +--INI-- +default_charset=Shift_JIS +internal_encoding= +input_encoding= +output_encoding= +mbstring.internal_encoding=Shift_JIS +mbstring.http_input=Shift_JIS +mbstring.http_output=Shift_JIS +--FILE-- + ---------- X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 ---------- ---------- -Content-type: text/html +Content-type: text/html; charset=UTF-8 ---------- ---------- X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 ---------- ---------- -Content-type: text/html +Content-type: text/html; charset=UTF-8 ---------- ---------- X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 ---------- ---------- X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 Warning: Header to delete may not contain colon. in %s on line 2 @@ -158,7 +158,7 @@ header_remove("X-Foo"); ---------- X-Powered-By: PHP/%s X-Foo: Bar -Content-type: text/html +Content-type: text/html; charset=UTF-8 flush diff --git a/sapi/cli/tests/bug43177.phpt b/sapi/cli/tests/bug43177.phpt index 36b5504ab0..a97769cf8f 100644 --- a/sapi/cli/tests/bug43177.phpt +++ b/sapi/cli/tests/bug43177.phpt @@ -60,23 +60,23 @@ HTTP/1.1 200 OK Host: localhost Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 OK HTTP/1.0 500 Internal Server Error Host: localhost Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 HTTP/1.0 500 Internal Server Error Host: localhost Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 HTTP/1.0 500 Internal Server Error Host: localhost Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/bug65066_100.phpt b/sapi/cli/tests/bug65066_100.phpt index 3a97c7e910..901ba188fd 100644 --- a/sapi/cli/tests/bug65066_100.phpt +++ b/sapi/cli/tests/bug65066_100.phpt @@ -36,4 +36,4 @@ HTTP/1.1 100 Continue Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/bug65066_422.phpt b/sapi/cli/tests/bug65066_422.phpt index 2552d1d11d..4e5d31c7a7 100644 --- a/sapi/cli/tests/bug65066_422.phpt +++ b/sapi/cli/tests/bug65066_422.phpt @@ -36,4 +36,4 @@ HTTP/1.1 422 Unknown Status Code Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/bug65066_511.phpt b/sapi/cli/tests/bug65066_511.phpt index aa4a9a0030..a0b4eae393 100644 --- a/sapi/cli/tests/bug65066_511.phpt +++ b/sapi/cli/tests/bug65066_511.phpt @@ -36,4 +36,4 @@ HTTP/1.1 511 Network Authentication Required Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/bug65633.phpt b/sapi/cli/tests/bug65633.phpt index 55834095b1..456436b1f7 100644 --- a/sapi/cli/tests/bug65633.phpt +++ b/sapi/cli/tests/bug65633.phpt @@ -39,7 +39,7 @@ fclose($fp); HTTP/1.1 200 OK Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 array(1) { ["foo"]=> diff --git a/sapi/cli/tests/php_cli_server_004.phpt b/sapi/cli/tests/php_cli_server_004.phpt index b61f88637e..8b913f6596 100644 --- a/sapi/cli/tests/php_cli_server_004.phpt +++ b/sapi/cli/tests/php_cli_server_004.phpt @@ -40,7 +40,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(19) "HTTP_HOST:localhost" string(21) "HTTP_USER_AGENT:dummy" diff --git a/sapi/cli/tests/php_cli_server_005.phpt b/sapi/cli/tests/php_cli_server_005.phpt index ccc0f8f3ab..cdd0ae902f 100644 --- a/sapi/cli/tests/php_cli_server_005.phpt +++ b/sapi/cli/tests/php_cli_server_005.phpt @@ -52,7 +52,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 array(1) { ["userfile"]=> diff --git a/sapi/cli/tests/php_cli_server_006.phpt b/sapi/cli/tests/php_cli_server_006.phpt index 09e7ab07a5..ad6d6c9598 100644 --- a/sapi/cli/tests/php_cli_server_006.phpt +++ b/sapi/cli/tests/php_cli_server_006.phpt @@ -36,7 +36,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(3) "foo" string(3) "bar" diff --git a/sapi/cli/tests/php_cli_server_007.phpt b/sapi/cli/tests/php_cli_server_007.phpt index 64d4df0ed7..6420ff5a41 100644 --- a/sapi/cli/tests/php_cli_server_007.phpt +++ b/sapi/cli/tests/php_cli_server_007.phpt @@ -37,4 +37,4 @@ Host: %s Connection: close X-Powered-By: PHP/%s WWW-Authenticate: Digest realm="foo",qop="auth",nonce="XXXXX",opaque="acbd18db4cc2f85cedef654fccc4a4d8" -Content-type: text/html +Content-type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/php_cli_server_008.phpt b/sapi/cli/tests/php_cli_server_008.phpt index 2e68e24059..01f825a746 100644 --- a/sapi/cli/tests/php_cli_server_008.phpt +++ b/sapi/cli/tests/php_cli_server_008.phpt @@ -56,13 +56,13 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(8) "HTTP/1.1" HTTP/1.0 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(8) "HTTP/1.0" diff --git a/sapi/cli/tests/php_cli_server_009.phpt b/sapi/cli/tests/php_cli_server_009.phpt index 2beaeedab6..231797160f 100644 --- a/sapi/cli/tests/php_cli_server_009.phpt +++ b/sapi/cli/tests/php_cli_server_009.phpt @@ -80,14 +80,14 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(8) "/foo/bar" HTTP/1.0 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(9) "/foo/bar/" HTTP/1.0 404 Not Found diff --git a/sapi/cli/tests/php_cli_server_010.phpt b/sapi/cli/tests/php_cli_server_010.phpt index 2ef018b857..30e6d047a7 100644 --- a/sapi/cli/tests/php_cli_server_010.phpt +++ b/sapi/cli/tests/php_cli_server_010.phpt @@ -57,7 +57,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(18) "/index.php/foo/bar" string(10) "/index.php" @@ -67,7 +67,7 @@ HTTP/1.0 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(19) "/index.php/foo/bar/" string(10) "/index.php" diff --git a/sapi/cli/tests/php_cli_server_012.phpt b/sapi/cli/tests/php_cli_server_012.phpt index 9a1e60c48b..302540f7e6 100644 --- a/sapi/cli/tests/php_cli_server_012.phpt +++ b/sapi/cli/tests/php_cli_server_012.phpt @@ -42,7 +42,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 Array ( diff --git a/sapi/cli/tests/php_cli_server_015.phpt b/sapi/cli/tests/php_cli_server_015.phpt index 6fb0169244..e3d8c4170d 100644 --- a/sapi/cli/tests/php_cli_server_015.phpt +++ b/sapi/cli/tests/php_cli_server_015.phpt @@ -43,7 +43,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8
Fatal error: Call to undefined function non_exists_function() in %ssyntax_error.php on line %s
diff --git a/sapi/cli/tests/php_cli_server_017.phpt b/sapi/cli/tests/php_cli_server_017.phpt index 73530af480..34e7d5e289 100644 --- a/sapi/cli/tests/php_cli_server_017.phpt +++ b/sapi/cli/tests/php_cli_server_017.phpt @@ -39,6 +39,6 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(%d) "%sindex.php" diff --git a/sapi/cli/tests/php_cli_server_018.phpt b/sapi/cli/tests/php_cli_server_018.phpt index deb9348768..44e1292934 100644 --- a/sapi/cli/tests/php_cli_server_018.phpt +++ b/sapi/cli/tests/php_cli_server_018.phpt @@ -39,6 +39,6 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: %s -Content-type: text/html +Content-type: text/html; charset=UTF-8 string(5) "PATCH" diff --git a/sapi/cli/tests/php_cli_server_019.phpt b/sapi/cli/tests/php_cli_server_019.phpt index 2b983e5c0a..aeb7a9f891 100644 --- a/sapi/cli/tests/php_cli_server_019.phpt +++ b/sapi/cli/tests/php_cli_server_019.phpt @@ -44,7 +44,7 @@ Host: %s Connection: close X-Powered-By: %s Bar-Foo: Foo -Content-type: text/html +Content-type: text/html; charset=UTF-8 array(2) { ["Host"]=> @@ -64,5 +64,5 @@ array(3) { ["Bar-Foo"]=> string(3) "Foo" ["Content-type"]=> - string(9) "text/html" + string(24) "text/html; charset=UTF-8" } diff --git a/sapi/cli/tests/upload_2G.phpt b/sapi/cli/tests/upload_2G.phpt index b8416ea730..707eddbad3 100644 --- a/sapi/cli/tests/upload_2G.phpt +++ b/sapi/cli/tests/upload_2G.phpt @@ -43,7 +43,7 @@ if (!$fp) { } $prev = "----123 -Content-Type: text/plain +Content-Type: text/plain; charset=UTF-8 Content-Disposition: form-data; name=\"file1\"; filename=\"file1.txt\"\n\n"; $post = "\n----123--\n"; $total = $length + strlen($prev) + strlen($post); @@ -79,7 +79,7 @@ HTTP/1.1 200 OK Host: %s Connection: close X-Powered-By: PHP/%s -Content-type: text/html +Content-type: text/html; charset=UTF-8 array(1) { ["file1"]=> diff --git a/tests/basic/encoding.phpt b/tests/basic/encoding.phpt new file mode 100644 index 0000000000..b2ee5f3ca2 --- /dev/null +++ b/tests/basic/encoding.phpt @@ -0,0 +1,39 @@ +--TEST-- +PHP encoding setting test +--INI-- +--FILE-- +