cvs: php4 /ext/mbstring mbstring.c

From: Date: Sun, 28 Jul 2002 09:42:15 +0000
Subject: cvs: php4 /ext/mbstring mbstring.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-13007@lists.php.net to get a copy of this message
yohgaki Sun Jul 28 05:42:15 2002 EDT Modified files: /php4/ext/mbstring mbstring.c Log: Fixed query string handling. Now some.php?a&b=1;c works. # arg_separator.output can be multile chars Index: php4/ext/mbstring/mbstring.c diff -u php4/ext/mbstring/mbstring.c:1.82 php4/ext/mbstring/mbstring.c:1.83 --- php4/ext/mbstring/mbstring.c:1.82 Sat Jul 27 09:58:16 2002 +++ php4/ext/mbstring/mbstring.c Sun Jul 28 05:42:15 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mbstring.c,v 1.82 2002/07/27 13:58:16 hirokawa Exp $ */ +/* $Id: mbstring.c,v 1.83 2002/07/28 09:42:15 yohgaki Exp $ */ /* * PHP4 Multibyte String module "mbstring" (currently only for Japanese) @@ -1231,7 +1231,7 @@ static void php_mbstr_encoding_handler(zval *arg, char *res, char *separator TSRMLS_DC) { - char *var, *val; + char *var, *val, *s1, *s2; char *strtok_buf = NULL, **val_list; zval *array_ptr = (zval *) arg; int n, num, val_len, *len_list, *elist, elistsz; @@ -1248,17 +1248,18 @@ return; } - /* count the variables contained in the query */ + /* count the variables(separators) contained in the "res". + * separator may contain multiple separator chars. + * separaror chars are set in php.ini (arg_separator.input) + */ num = 1; - var = res; - n = strlen(separator); - - while (var=strstr(var, separator)) { - num++; - var+=n; - } - - num *= 2; + for (s1=res; *s1 != '\0'; s1++) + for (s2=separator; *s2 != '\0'; s2++) + if (*s1 == *s2) + num++; + + num *= 2; /* need space for variable name and value */ + val_list = (char **)ecalloc(num, sizeof(char *)); len_list = (int *)ecalloc(num, sizeof(int)); @@ -1266,28 +1267,24 @@ n = 0; strtok_buf = NULL; var = php_strtok_r(res, separator, &strtok_buf); - - while (var && n < num) { + while (var) { val = strchr(var, '='); + val_list[n] = var; + len_list[n] = php_url_decode(var, strlen(var)); + n++; if (val) { /* have a value */ *val++ = '\0'; - val_list[n] = var; - len_list[n] = php_url_decode(var, strlen(var)); - n++; val_list[n] = val; len_list[n] = php_url_decode(val, strlen(val)); } else { - val_list[n] = var; - len_list[n] = php_url_decode(var, strlen(var)); - n++; val_list[n] = NULL; len_list[n] = 0; } n++; var = php_strtok_r(NULL, separator, &strtok_buf); - } - num = n; - + } + num = n; /* make sure to process initilized vars only */ + /* initialize converter */ to_encoding = MBSTRG(current_internal_encoding); elist = MBSTRG(http_input_list);

« previous php.cvs (#13007) next »