PHP String in Array Only Returns First Character
For the next week, I'm stuck with a sadly very slow 1-bar EDGE internet connection, so forgive me if I didn't spend quite enough time researching this one, but I just set up a local server for testing code that I would normally test over the internet, and it doesn't seem to be working 开发者_如何学Gothe same way on my local LAMP install.
The issue is, when I do this:
echo strtolower($_REQUEST['page']);
the result is this:
files
However, when I do this:
$page['name'] = strtolower($_REQUEST['page']);
echo $page['name'];
the result is this:
f
No, that's not a typo, it consistently returns only the first letter of the string. Doing a var_dump($page)
will result in string(5) "files"
, but doing a var_dump($page['name'])
will result in string(1) "f"
. I'm using PHP 5.2.1
.
What is going on here?
You pretty much answered your own question. $page
is "files" (as shown by your first var_dump
). This could be caused by the deprecated register_globals
, or a manual approximation thereof. Given that,
$page['files']
is "f". This is because non-numeric strings are implicitly converted to 0 (!). You can reproduce this easily with:
$page = 'files';
echo $page['files'];
Doing a
var_dump($page)
will result instring(5) "files"
This means the variable $page
is a string, not as you seem to expect an array containing a string. You can use array-like offsets on strings as well to return a single character within the string. Through the magic of type casting $string['files']
is equivalent to $string[0]
, which returns the first character.
Your problem is somewhere where you assign the string to $page
, or somewhere after that were you turn it from an array into a single string. The code you provided should work as-is.
I suppose $page
is already a string when you assign to $page['name']
, so you're actually setting the first character of the string. Try to explicitly declare $page = array()
.
To sum up: it's a matter of variable declaration. Before using your array, declare it first:
$page = array();
Good luck working with strange server configurations.
精彩评论