开发者

PHP String in Array Only Returns First Character

开发者 https://www.devze.com 2023-01-13 15:16 出处:网络
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 testi

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 in string(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.

0

精彩评论

暂无评论...
验证码 换一张
取 消