接下来的一周,我陷入了一个非常缓慢的1-bar EDGE互联网连接,所以请原谅我,如果我没有花足够的时间研究这个,但我只是设置了一个本地服务器进行测试我通常会在互联网上测试的代码,它在我的本地LAMP安装上似乎没有相同的工作方式。
问题是,当我这样做时:
echo strtolower($_REQUEST['page']);
结果如下:
files
然而,当我这样做时:
$page['name'] = strtolower($_REQUEST['page']);
echo $page['name'];
结果如下:
f
不,这不是拼写错误,它始终只返回字符串的第一个字母。执行var_dump($page)
会产生string(5) "files"
,但执行var_dump($page['name'])
会产生string(1) "f"
。我正在使用PHP 5.2.1
。
这里发生了什么?
谢谢!
阿里
答案 0 :(得分:7)
你几乎回答了自己的问题。 $page
是“文件”(如您的第一个var_dump
所示)。这可能是由于已弃用register_globals
或其手动近似造成的。鉴于此,
$page['files']
是“f”。这是因为非数字字符串被隐式转换为0(!)。您可以使用以下方法轻松复制:
$page = 'files';
echo $page['files'];
答案 1 :(得分:1)
执行
var_dump($page)
会产生string(5) "files"
这意味着变量$page
是一个字符串,而不是您希望包含字符串的数组。您也可以在字符串上使用类似数组的偏移量,以返回字符串中的单个字符。通过类型转换的魔力$string['files']
相当于$string[0]
,它返回第一个字符。
您的问题在某处,您将字符串分配给$page
,或者在此之后的某个地方,您将其从数组转换为单个字符串。您提供的代码应该按原样运行。
我认为$page
在分配给$page['name']
时已经是一个字符串,所以你实际上是设置字符串的第一个字符。尝试明确声明$page = array()
。
答案 2 :(得分:1)
总结:这是变量声明的问题。在使用数组之前,先声明它:
$page = array();
使用奇怪的服务器配置祝你好运。