Edit report at https://bugs.php.net/bug.php?id=60219&edit=1
ID: 60219 Comment by: kcerny at wirelesscapital dot com Reported by: kieran at menor dot dk Summary: POSTDATA periods (.) being converted to underscores (_) Status: Open Type: Feature/Change Request Package: Unknown/Other Function PHP Version: Irrelevant Block user comment: N Private report: N New Comment: The relevant code is found in the source file main/php_variables.c at line 94: /* ensure that we don't have spaces or dots in the variable name (not binary safe) */ for (p = var; *p; p++) { if (*p == ' ' || *p == '.') { *p='_'; } else if (*p == '[') { is_array = 1; ip = p; *p = 0; break; } } I'm not sure what repercussions we'll face by removing that first if statement. I would suggest controlling this replacement behavior using an INI setting for backwards compatibility. Previous Comments: ------------------------------------------------------------------------ [2011-11-15 04:20:32] pablitobof at yahoo dot com dot mx PHP 5.4 alpha1 has just been released which removes register_globals. It seems appropriate that there would be a matching move towards removing the now unnecessary translation of characters in requests. ------------------------------------------------------------------------ [2011-11-04 14:10:02] kieran at menor dot dk Not to mention, it's also potentially confusing and unexpected behavior for people who didn't happen to read that tiny paragraph of the manual. ------------------------------------------------------------------------ [2011-11-04 14:04:59] kieran at menor dot dk Description: ------------ This is documented "intended" behavior as per this section of the manual: http://www.php.net/manual/en/language.variables.external.php#language.variables.external.dot-in-names I'm guessing it's a leftover from back when register_globals a common thing. It's been reported as a bug before a long time ago, and dismissed: https://bugs.php.net/bug.php?id=30956 ... but this is 2011, and I think it's worth giving it another go. Here's why: First of all, nobody assigns POSTDATA directly to variables anymore. It all goes through $_POST; Secondly, the claim that you can't have periods in variable names is bogus (see test script). Lastly, the period is a good seperator to have available, and I understand that certain services such as OpenID depend on it, as noted here: http://stackoverflow.com/questions/68651/can-i-get-php-to-stop-replacing-characters-in-get-or-post-arrays#1939911 Test script: --------------- ${'sure.you.can'} = 'Foo'; var_dump($GLOBALS['sure.you.can']); ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60219&edit=1