php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #5768 patch to make parse_str() optionally save into an array
Submitted: 2000-07-24 23:37 UTC Modified: 2000-09-29 14:56 UTC
From: dshadow at zort dot net Assigned:
Status: Closed Package: Feature/Change Request
PHP Version: 4.0.1pl2 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: dshadow at zort dot net
New email:
PHP Version: OS:

 

 [2000-07-24 23:37 UTC] dshadow at zort dot net
The following patch modifies parse_str() to optionally save variables into an array, rather than into the current variable space.

Usage:

Normal:
	parse_str(encodedString);

Saves variables into the output array, rather than into the current variable space:
	parse_str(encodedString, outputArray);

This has been used in a production environment for at least six months with no problems. (The patch was originally written for PHP3.) I'm hoping this can get included with PHP so I don't have to keep repatching whenever a new PHP version is released.

John Bafford
dshadow@zort.net

--

*** string.old	Mon Jul 24 17:14:32 2000
--- string.c	Mon Jul 24 17:16:23 2000
***************
*** 2162,2184 ****
  }
  /* }}} */
  
! /* {{{ proto void parse_str(string encoded_string)
!    Parses GET/POST/COOKIE data and sets global variables. */
  PHP_FUNCTION(parse_str)
  {
! 	zval **arg;
  	char *res = NULL;
  	PLS_FETCH();
  	SLS_FETCH();
! 
! 	if (zend_get_parameters_ex(1, &arg) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_string_ex(arg);
! 	if ((*arg)->value.str.val && *(*arg)->value.str.val) {
! 		res = estrndup((*arg)->value.str.val,(*arg)->value.str.len);
  	}
! 	php_treat_data(PARSE_STRING, res ELS_CC PLS_CC SLS_CC);
  }
  /* }}} */
  
--- 2162,2227 ----
  }
  /* }}} */
  
! /* {{{ proto void parse_str(string encoded_string, [array storage])
!    Parses GET/POST/COOKIE data and sets global variables.
!    Stores into storage if array is given
! */
  PHP_FUNCTION(parse_str)
  {
! 	zval **arg, **arrayArg;
! 	zval *sarg;
  	char *res = NULL;
+ 	int argCount;
+ 	
  	PLS_FETCH();
  	SLS_FETCH();
! 	
! 	argCount = ARG_COUNT(ht);
! 	if(argCount < 1 || argCount > 2 || zend_get_parameters_ex(argCount, &arg, &arrayArg) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
+ 	
  	convert_to_string_ex(arg);
! 	sarg = *arg;
! 	if (sarg->value.str.val && *sarg->value.str.val) {
! 		res = estrndup(sarg->value.str.val, sarg->value.str.len);
  	}
! 	
! 	if(argCount == 1)
! 		php_treat_data(PARSE_STRING, res ELS_CC PLS_CC SLS_CC);
! 	else
! 	{
! 		if(!ParameterPassedByReference(ht, 2)){
! 			php3_error(E_WARNING, "Array not passed by reference in call to parse_str()");
! 			return;
! 		}
! 		
! 		//Clear out the array that was passed in
! 		pval_destructor(*arrayArg);
! 		array_init(*arrayArg);
! 		
! 		if(res) //hacked up php_treat_data
! 		{
! 			char *var, *val;
! 		
! 			var = strtok(res, PG(arg_separator));
! 			
! 			while (var) {
! 				val = strchr(var, '=');
! 				if (val) { /* have a value */
! 					*val++ = '\0';
! 					/* FIXME: XXX: not binary safe, discards returned length */
! 					php_url_decode(var, strlen(var));
! 					php_url_decode(val, strlen(val));
! 					
! 					add_assoc_string(*arrayArg, var, val, 1);
! 				}
! 				var = strtok(NULL, PG(arg_separator));
! 			}
! 		}
! 	}
! 	
! 	efree(res);
  }
  /* }}} */
  
*** basic_functions.old	Mon Jul 24 17:20:49 2000
--- basic_functions.c	Mon Jul 24 17:20:51 2000
***************
*** 169,175 ****
  	PHP_FE(levenshtein,									NULL)
  	PHP_FE(chr,										NULL)
  	PHP_FE(ord,										NULL)
! 	PHP_FE(parse_str,								NULL)
  	PHP_FE(str_pad,									NULL)
  	PHP_FALIAS(rtrim,			chop,				NULL)
  	PHP_FALIAS(strchr,			strstr,				NULL)
--- 169,175 ----
  	PHP_FE(levenshtein,									NULL)
  	PHP_FE(chr,										NULL)
  	PHP_FE(ord,										NULL)
! 	PHP_FE(parse_str,								second_arg_force_ref)
  	PHP_FE(str_pad,									NULL)
  	PHP_FALIAS(rtrim,			chop,				NULL)
  	PHP_FALIAS(strchr,			strstr,				NULL)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2000-09-29 14:56 UTC] waldschrott@php.net
fixed
 
PHP Copyright © 2001-2026 The PHP Group
All rights reserved.
Last updated: Tue Jun 16 07:00:01 2026 UTC