lbarnaud Wed Nov 5 21:35:03 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/standard/tests/general_functions parse_ini_string_001.phpt parse_ini_string_002.phpt
Modified files: /php-src NEWS /ZendEngine2 zend_ini_scanner.l /php-src/ext/standard basic_functions.c basic_functions.h Log: MFH: Added parse_ini_string() function (grange at lemonde dot fr, Arnaud) [DOC] new function parse_ini_string() proto array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]]) Same as parse_ini_file() except that it takes a string instead of a filename.
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.363&r2=1.2027.2.547.2.965.2.364&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.363 php-src/NEWS:1.2027.2.547.2.965.2.364 --- php-src/NEWS:1.2027.2.547.2.965.2.363 Tue Nov 4 23:01:13 2008 +++ php-src/NEWS Wed Nov 5 21:35:01 2008 @@ -10,6 +10,7 @@ parameter validation. (Felipe) - Changed openssl info to show the shared library version number. (Scott) +- Added parse_ini_string() function. (grange at lemonde dot fr, Arnaud) - Added str_getcsv() function. (Sara) - Added ability to send user defined HTTP headers with SOAP request. (Brian J.France, Dmitry) http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_scanner.l?r1=1.41.2.2.2.2.2.12&r2=1.41.2.2.2.2.2.13&diff_format=u Index: ZendEngine2/zend_ini_scanner.l diff -u ZendEngine2/zend_ini_scanner.l:1.41.2.2.2.2.2.12 ZendEngine2/zend_ini_scanner.l:1.41.2.2.2.2.2.13 --- ZendEngine2/zend_ini_scanner.l:1.41.2.2.2.2.2.12 Sun Nov 2 23:36:10 2008 +++ ZendEngine2/zend_ini_scanner.l Wed Nov 5 21:35:02 2008 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.l,v 1.41.2.2.2.2.2.12 2008/11/02 23:36:10 lbarnaud Exp $ */ +/* $Id: zend_ini_scanner.l,v 1.41.2.2.2.2.2.13 2008/11/05 21:35:02 lbarnaud Exp $ */ #include <errno.h> #include "zend.h" @@ -188,7 +188,7 @@ */ char *zend_ini_scanner_get_filename(TSRMLS_D) { - return ini_filename; + return ini_filename ? ini_filename : "Unknown"; } /* }}} */ @@ -481,7 +481,7 @@ } <INITIAL>{TABS_AND_SPACES}*[#][^\r\n]*{NEWLINE} { /* #Comment */ - zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", ini_filename, SCNG(lineno)); + zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno)); BEGIN(INITIAL); SCNG(lineno)++; return END_OF_LINE; http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.725.2.31.2.64.2.68&r2=1.725.2.31.2.64.2.69&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.68 php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.69 --- php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.68 Sun Nov 2 21:19:37 2008 +++ php-src/ext/standard/basic_functions.c Wed Nov 5 21:35:02 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.725.2.31.2.64.2.68 2008/11/02 21:19:37 felipe Exp $ */ +/* $Id: basic_functions.c,v 1.725.2.31.2.64.2.69 2008/11/05 21:35:02 lbarnaud Exp $ */ #include "php.h" #include "php_streams.h" @@ -989,6 +989,13 @@ ZEND_ARG_INFO(0, scanner_mode) ZEND_END_ARG_INFO() +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_ini_string, 0, 0, 1) + ZEND_ARG_INFO(0, ini_string) + ZEND_ARG_INFO(0, process_sections) + ZEND_ARG_INFO(0, scanner_mode) +ZEND_END_ARG_INFO() + #if ZEND_DEBUG static ZEND_BEGIN_ARG_INFO(arginfo_config_get_hash, 0) @@ -3450,6 +3457,7 @@ PHP_FE(connection_status, arginfo_connection_status) PHP_FE(ignore_user_abort, arginfo_ignore_user_abort) PHP_FE(parse_ini_file, arginfo_parse_ini_file) + PHP_FE(parse_ini_string, arginfo_parse_ini_string) #if ZEND_DEBUG PHP_FE(config_get_hash, arginfo_config_get_hash) #endif @@ -6372,6 +6380,43 @@ } /* }}} */ +/* {{{ proto array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]]) + Parse configuration string */ +PHP_FUNCTION(parse_ini_string) +{ + char *string = NULL, *str = NULL; + int str_len = 0; + zend_bool process_sections = 0; + long scanner_mode = ZEND_INI_SCANNER_NORMAL; + zend_ini_parser_cb_t ini_parser_cb; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|bl", &str, &str_len, &process_sections, &scanner_mode) == FAILURE) { + RETURN_FALSE; + } + + /* Set callback function */ + if (process_sections) { + BG(active_ini_file_section) = NULL; + ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections; + } else { + ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb; + } + + /* Setup string */ + string = (char *) emalloc(str_len + ZEND_MMAP_AHEAD); + memcpy(string, str, str_len); + memset(string + str_len, 0, ZEND_MMAP_AHEAD); + + array_init(return_value); + if (zend_parse_ini_string(string, 0, scanner_mode, ini_parser_cb, return_value TSRMLS_CC) == FAILURE) { + zend_hash_destroy(Z_ARRVAL_P(return_value)); + efree(Z_ARRVAL_P(return_value)); + RETVAL_FALSE; + } + efree(string); +} +/* }}} */ + #if ZEND_DEBUG /* This function returns an array of ALL valid ini options with values and * is not the same as ini_get_all() which returns only registered ini options. Only useful for devs to debug php.ini scanner/parser! */ http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.h?r1=1.139.2.4.2.6.2.9&r2=1.139.2.4.2.6.2.10&diff_format=u Index: php-src/ext/standard/basic_functions.h diff -u php-src/ext/standard/basic_functions.h:1.139.2.4.2.6.2.9 php-src/ext/standard/basic_functions.h:1.139.2.4.2.6.2.10 --- php-src/ext/standard/basic_functions.h:1.139.2.4.2.6.2.9 Tue Apr 15 08:44:21 2008 +++ php-src/ext/standard/basic_functions.h Wed Nov 5 21:35:02 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.h,v 1.139.2.4.2.6.2.9 2008/04/15 08:44:21 jani Exp $ */ +/* $Id: basic_functions.h,v 1.139.2.4.2.6.2.10 2008/11/05 21:35:02 lbarnaud Exp $ */ #ifndef BASIC_FUNCTIONS_H #define BASIC_FUNCTIONS_H @@ -127,6 +127,7 @@ /* From the INI parser */ PHP_FUNCTION(parse_ini_file); +PHP_FUNCTION(parse_ini_string); #if ZEND_DEBUG PHP_FUNCTION(config_get_hash); #endif http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/parse_ini_string_001.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/general_functions/parse_ini_string_001.phpt +++ php-src/ext/standard/tests/general_functions/parse_ini_string_001.phpt --TEST-- Test parse_ini_string() function --FILE-- <?php /* Prototype: array parse_ini_string(string $string [,bool $process_sections]); Description: parse_ini_string() loads in the ini file specified in filename, and returns the settings in it in an associative array. */ $parse_string = <<<EOD ; Comment starts with semi-colon(;) ; Section starts with [<section name>] ; start of ini file [Constans] one = 1 five = 5 animal = BIRD Language = PHP PHP_CONSTANT = 1.2345678 10 = Ten HELLO = HELLO [date] date = time = [paths] path = /usr/local/bin URL = http://www.php.net [Decimal] Decimal_value1 = 100 Decimal_value2 = -100 Decimal_value3 = -2147483647 Decimal_value4 = 2147483647 Decimal_value5 = -2147483648 Decimal_value6 = 2147483648 [Octal] Octal_value = 0100 [Hex] Hex_value1 = 0x101 Hex_Value2 = 0x102 Hex_Value2 = 0x103 [Non-alphanumerics_as_values] ;Non-alpha numeric chars without quotes Non_alpha1 = ; Non_alpha2 = + Non_alpha3 = * Non_alpha4 = % Non_alpha5 = <> Non_alpha6 = @ Non_alpha7 = # Non_alpha8 = ^ Non_alpha9 = - Non_alpha10 = : Non_alpha11 = ? Non_alpha12 = / Non_alpha13 = \ ;These chars have a special meaning when used in the value, ; hence parser throws an error ;Non_alpha14 = & ;Non_alpha15 = {} ;Non_alpha16 = | ;Non_alpha17 = ~ ;Non_alpha18 = ! ;Non_alpha19 = $ ;Non_alpha20 = () Non_alpha1_quotes = ";" Non_alpha2_quotes = "+" Non_alpha3_quotes = "*" Non_alpha4_quotes = "%" Non_alpha5_quotes = "<>" Non_alpha6_quotes = "@" Non_alpha7_quotes = "#" Non_alpha8_quotes = "^" Non_alpha9_quotes = "-" Non_alpha10_quotes = "=" Non_alpha11_quotes = ":" Non_alpha12_quotes = "?" Non_alpha13_quotes = "/" ;Non_alpha14_quotes = "\" Non_alpha15_quotes = "&" Non_alpha16_quotes = "{}" Non_alpha17_quotes = "|" Non_alpha18_quotes = "~" Non_alpha19_quotes = "!" ;Non_alpha20_quotes = "$" Non_alpha21_quotes = "()" [Non-alpha numerics in strings] ;expected error, as the non-alphanumeric chars not enclosed in double quotes("") Non_alpha_string1 = [EMAIL PROTECTED] ;Non_alpha_string2 = Hello!world ;Non_alpha_string3 = Hello#world ;Non_alpha_string4 = Hello%world ;Non_alpha_string5 = Hello&world ;Non_alpha_string6 = Hello*world ;Non_alpha_string7 = Hello+world ;Non_alpha_string8 = Hello-world ;Non_alpha_string9 = Hello'world ;Non_alpha_string10 = Hello:world ;Non_alpha_string11 = Hello;world ;Non_alpha_string12 = Hello<world ;Non_alpha_string13 = Hello>world ;Non_alpha_string14 = Hello>world ;Non_alpha_string15 = Hello?world ;Non_alpha_string16 = Hello\world ;Non_alpha_string17 = Hello^world ;Non_alpha_string18 = Hello_world ;Non_alpha_string19 = Hello|world ;Non_alpha_string20 = Hello~world ;Non_alpha_string21 = Hello`world ;Non_alpha_string22 = Hello(world) [Non-alpha numerics in strings -with quotes] Non_alpha_string1_quotes = "[EMAIL PROTECTED]" Non_alpha_string2_quotes = "Hello!world" Non_alpha_string3_quotes = "Hello#world" Non_alpha_string4_quotes = "Hello&world" Non_alpha_string5_quotes = "Hello*world" Non_alpha_string6_quotes = "Hello+world" Non_alpha_string7_quotes = "Hello-world" Non_alpha_string8_quotes = "Hello'world" Non_alpha_string9_quotes = "Hello:world" Non_alpha_string10_quotes = "Hello;world" Non_alpha_string11_quotes = "Hello<world" Non_alpha_string12_quotes = "Hello>world" Non_alpha_string13_quotes = "Hello>world" Non_alpha_string14_quotes = "Hello?world" Non_alpha_string15_quotes = "Hello\world" Non_alpha_string16_quotes = "Hello^world" Non_alpha_string17_quotes = "Hello_world" Non_alpha_string18_quotes = "Hello|world" Non_alpha_string19_quotes = "Hello~world" Non_alpha_string20_quotes = "Hello`world" Non_alpha_string21_quotes = "Hello(world)" [Newlines_in_Values] String1 = "Hello, world\nGood Morning" String2 = "\nHello, world Good Morning\n" String3 = 'Hello, world\tGood Morning' String4 = "\n" String5 = "\n\n" String6 = Hello, world\tGood Morning [ReservedKeys_as_Values] Key1 = YES Key2 = Yes Key3 = yEs Key4 = NO Key5 = No Key6 = nO Key7 = TRUE Key8 = True Key9 = tRUE Key10 = true Key11 = FALSE Key12 = False Key13 = false Key14 = fAlSE Key15 = NULL Key16 = Null Key17 = nuLL Key18 = null [ReservedKeys_as_Keys] ; Expected:error, reserved key words must not be used as keys for ini file ;YES = 1 ;Yes = 2 ;yEs = 1.2 ;YES = YES ;NO = "" ;No = "string" ;nO = "\0" ;TRUE = 1.1 ;True = 1 ;tRUE = 5 ;true = TRUE ;FALSE = FALSE ;False = "" ;false = "hello" ;fAlSE = "" ;NULL = "" ;Null = 0 ;nuLL = "\0" ;null = NULL ; end of ini file EOD; echo "*** Test parse_ini_string() function: with various keys and values given in string ***\n"; echo "-- ini string without process_sections optional arg --\n"; define('BIRD', 'Humming bird'); $ini_array = parse_ini_string($parse_string); print_r($ini_array); echo "\n-- ini string with process_sections as TRUE --\n"; $ini_array = parse_ini_string($parse_string, TRUE); print_r($ini_array); echo "*** Done **\n"; ?> --EXPECTF-- *** Test parse_ini_string() function: with various keys and values given in string *** -- ini string without process_sections optional arg -- Array ( [one] => 1 [five] => 5 [animal] => Humming bird [Language] => PHP [PHP_CONSTANT] => 1.2345678 [10] => Ten [HELLO] => HELLO [date] => [time] => [path] => /usr/local/bin [URL] => http://www.php.net [Decimal_value1] => 100 [Decimal_value2] => -100 [Decimal_value3] => -2147483647 [Decimal_value4] => 2147483647 [Decimal_value5] => -2147483648 [Decimal_value6] => 2147483648 [Octal_value] => 0100 [Hex_value1] => 0x101 [Hex_Value2] => 0x103 [Non_alpha1] => [Non_alpha2] => + [Non_alpha3] => * [Non_alpha4] => % [Non_alpha5] => <> [Non_alpha6] => @ [Non_alpha7] => # [Non_alpha8] => ^ [Non_alpha9] => - [Non_alpha10] => : [Non_alpha11] => ? [Non_alpha12] => / [Non_alpha13] => \ [Non_alpha1_quotes] => ; [Non_alpha2_quotes] => + [Non_alpha3_quotes] => * [Non_alpha4_quotes] => % [Non_alpha5_quotes] => <> [Non_alpha6_quotes] => @ [Non_alpha7_quotes] => # [Non_alpha8_quotes] => ^ [Non_alpha9_quotes] => - [Non_alpha10_quotes] => = [Non_alpha11_quotes] => : [Non_alpha12_quotes] => ? [Non_alpha13_quotes] => / [Non_alpha15_quotes] => & [Non_alpha16_quotes] => {} [Non_alpha17_quotes] => | [Non_alpha18_quotes] => ~ [Non_alpha19_quotes] => ! [Non_alpha21_quotes] => () [Non_alpha_string1] => [EMAIL PROTECTED] [Non_alpha_string1_quotes] => [EMAIL PROTECTED] [Non_alpha_string2_quotes] => Hello!world [Non_alpha_string3_quotes] => Hello#world [Non_alpha_string4_quotes] => Hello&world [Non_alpha_string5_quotes] => Hello*world [Non_alpha_string6_quotes] => Hello+world [Non_alpha_string7_quotes] => Hello-world [Non_alpha_string8_quotes] => Hello'world [Non_alpha_string9_quotes] => Hello:world [Non_alpha_string10_quotes] => Hello;world [Non_alpha_string11_quotes] => Hello<world [Non_alpha_string12_quotes] => Hello>world [Non_alpha_string13_quotes] => Hello>world [Non_alpha_string14_quotes] => Hello?world [Non_alpha_string15_quotes] => Hello\world [Non_alpha_string16_quotes] => Hello^world [Non_alpha_string17_quotes] => Hello_world [Non_alpha_string18_quotes] => Hello|world [Non_alpha_string19_quotes] => Hello~world [Non_alpha_string20_quotes] => Hello`world [Non_alpha_string21_quotes] => Hello(world) [String1] => Hello, world Good Morning [String2] => Hello, world Good Morning [String3] => Hello, world Good Morning [String4] => [String5] => [String6] => Hello, world Good Morning [Key1] => 1 [Key2] => 1 [Key3] => 1 [Key4] => [Key5] => [Key6] => [Key7] => 1 [Key8] => 1 [Key9] => 1 [Key10] => 1 [Key11] => [Key12] => [Key13] => [Key14] => [Key15] => [Key16] => [Key17] => [Key18] => ) -- ini string with process_sections as TRUE -- Array ( [Constans] => Array ( [one] => 1 [five] => 5 [animal] => Humming bird [Language] => PHP [PHP_CONSTANT] => 1.2345678 [10] => Ten [HELLO] => HELLO ) [date] => Array ( [date] => [time] => ) [paths] => Array ( [path] => /usr/local/bin [URL] => http://www.php.net ) [Decimal] => Array ( [Decimal_value1] => 100 [Decimal_value2] => -100 [Decimal_value3] => -2147483647 [Decimal_value4] => 2147483647 [Decimal_value5] => -2147483648 [Decimal_value6] => 2147483648 ) [Octal] => Array ( [Octal_value] => 0100 ) [Hex] => Array ( [Hex_value1] => 0x101 [Hex_Value2] => 0x103 ) [Non-alphanumerics_as_values] => Array ( [Non_alpha1] => [Non_alpha2] => + [Non_alpha3] => * [Non_alpha4] => % [Non_alpha5] => <> [Non_alpha6] => @ [Non_alpha7] => # [Non_alpha8] => ^ [Non_alpha9] => - [Non_alpha10] => : [Non_alpha11] => ? [Non_alpha12] => / [Non_alpha13] => \ [Non_alpha1_quotes] => ; [Non_alpha2_quotes] => + [Non_alpha3_quotes] => * [Non_alpha4_quotes] => % [Non_alpha5_quotes] => <> [Non_alpha6_quotes] => @ [Non_alpha7_quotes] => # [Non_alpha8_quotes] => ^ [Non_alpha9_quotes] => - [Non_alpha10_quotes] => = [Non_alpha11_quotes] => : [Non_alpha12_quotes] => ? [Non_alpha13_quotes] => / [Non_alpha15_quotes] => & [Non_alpha16_quotes] => {} [Non_alpha17_quotes] => | [Non_alpha18_quotes] => ~ [Non_alpha19_quotes] => ! [Non_alpha21_quotes] => () ) [Non-alpha numerics in strings] => Array ( [Non_alpha_string1] => [EMAIL PROTECTED] ) [Non-alpha numerics in strings -with quotes] => Array ( [Non_alpha_string1_quotes] => [EMAIL PROTECTED] [Non_alpha_string2_quotes] => Hello!world [Non_alpha_string3_quotes] => Hello#world [Non_alpha_string4_quotes] => Hello&world [Non_alpha_string5_quotes] => Hello*world [Non_alpha_string6_quotes] => Hello+world [Non_alpha_string7_quotes] => Hello-world [Non_alpha_string8_quotes] => Hello'world [Non_alpha_string9_quotes] => Hello:world [Non_alpha_string10_quotes] => Hello;world [Non_alpha_string11_quotes] => Hello<world [Non_alpha_string12_quotes] => Hello>world [Non_alpha_string13_quotes] => Hello>world [Non_alpha_string14_quotes] => Hello?world [Non_alpha_string15_quotes] => Hello\world [Non_alpha_string16_quotes] => Hello^world [Non_alpha_string17_quotes] => Hello_world [Non_alpha_string18_quotes] => Hello|world [Non_alpha_string19_quotes] => Hello~world [Non_alpha_string20_quotes] => Hello`world [Non_alpha_string21_quotes] => Hello(world) ) [Newlines_in_Values] => Array ( [String1] => Hello, world Good Morning [String2] => Hello, world Good Morning [String3] => Hello, world Good Morning [String4] => [String5] => [String6] => Hello, world Good Morning ) [ReservedKeys_as_Values] => Array ( [Key1] => 1 [Key2] => 1 [Key3] => 1 [Key4] => [Key5] => [Key6] => [Key7] => 1 [Key8] => 1 [Key9] => 1 [Key10] => 1 [Key11] => [Key12] => [Key13] => [Key14] => [Key15] => [Key16] => [Key17] => [Key18] => ) [ReservedKeys_as_Keys] => Array ( ) ) *** Done ** http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/parse_ini_string_002.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/general_functions/parse_ini_string_002.phpt +++ php-src/ext/standard/tests/general_functions/parse_ini_string_002.phpt --TEST-- parse_ini_string() multiple calls --FILE-- <?php var_dump(parse_ini_string()); var_dump(parse_ini_string(1,1,1,1)); $ini = " test = "; var_dump(parse_ini_string($ini)); $ini = " test== "; var_dump(parse_ini_string($ini)); $ini = " test=test= "; var_dump(parse_ini_string($ini)); $ini = " test= \"new line\" "; var_dump(parse_ini_string($ini)); define("TEST_CONST", "test const value"); $ini = " test=TEST_CONST "; var_dump(parse_ini_string($ini)); $ini = " [section] test=hello "; var_dump(parse_ini_string($ini, true)); $ini = " [section] test=hello "; var_dump(parse_ini_string($ini, false)); $ini = " section.test=hello "; var_dump(parse_ini_string($ini, true)); $ini = " [section] section.test=hello "; var_dump(parse_ini_string($ini, true)); $ini = " [section] 1=2 "; var_dump(parse_ini_string($ini, true)); $ini = " 1=2 "; var_dump(parse_ini_string($ini, true)); $ini = " test=test2 test=test3 test=test4 "; var_dump(parse_ini_string($ini, true)); /* From bug #44574 */ $ini = "[section1]\nname = value"; var_dump(parse_ini_string($ini, true)); /* #44842, labels starting with underscore */ $ini = <<<'INI' foo=bar1 _foo=bar2 foo_=bar3 INI; var_dump(parse_ini_string($ini, true)); echo "Done\n"; ?> --EXPECTF-- Warning: parse_ini_string() expects at least 1 parameter, 0 given in %s bool(false) Warning: parse_ini_string() expects at most 3 parameters, 4 given in %s bool(false) array(1) { [%u|b%"test"]=> %unicode|string%(0) "" } Warning: syntax error, unexpected '=' in Unknown on line 2 in %s bool(false) Warning: syntax error, unexpected '=' in Unknown on line 2 in %s bool(false) array(1) { [%u|b%"test"]=> %unicode|string%(8) "new line" } array(1) { [%u|b%"test"]=> %unicode|string%(16) "test const value" } array(1) { [%u|b%"section"]=> array(1) { [%u|b%"test"]=> %unicode|string%(5) "hello" } } array(1) { [%u|b%"test"]=> %unicode|string%(5) "hello" } array(1) { [%u|b%"section.test"]=> %unicode|string%(5) "hello" } array(1) { [%u|b%"section"]=> array(1) { [%u|b%"section.test"]=> %unicode|string%(5) "hello" } } array(1) { [%u|b%"section"]=> array(1) { [1]=> %unicode|string%(1) "2" } } array(1) { [1]=> %unicode|string%(1) "2" } array(1) { [%u|b%"test"]=> %unicode|string%(5) "test4" } array(1) { [%u|b%"section1"]=> array(1) { [%u|b%"name"]=> %unicode|string%(5) "value" } } array(3) { [%u|b%"foo"]=> %unicode|string%(4) "bar1" [%u|b%"_foo"]=> %unicode|string%(4) "bar2" [%u|b%"foo_"]=> %unicode|string%(4) "bar3" } Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php