逻辑似乎合理,因此可能是空格和非字母数字字符问题。所以我建议这样做:
$raw_page = preg_replace('/[^a-zA-Z0-9]+/', '', trim($_GET['p']));
if(!empty($raw_page) && array_key_exists($raw_page, $data)){
$page = $raw_page;
}
else {
$page = "index";
}
我还添加了一个array_key_exists
,以便逻辑可以处理对不存在的页面或数组索引发出的请求。
编辑:另外,您的数组数据不一致。东安echo $data['index']['title'];
将导致:
<img src = 'logo.png' alt=''>
但是这样做echo $data['gallery1']['title'];
会导致:
Gallery 1
所以我认为你也需要解决这个问题。
编辑关于混合数组值的附加信息:好的,从编程的角度来看,数组对 value 具有混合值类型的方式仍然存在问题$data['title']
。我认为这是一个等待发生的问题。所以我建议重新修改 $data 数组结构,如下所示:
$data =
array(
"index" => array(
"name" => "title",
"title" => array("type" => "image", "value" => "<img src = 'logo.png' alt=''>"),
"fallback_html" => "main.php",
"gallery" => array("1" => "nothing")),
"gallery1" => array(
"name" => "gallery1",
"title" => array("type" => "text", "value" => "Gallery 1"),
"fallback_html" => "",
"gallery" => array("1" => "jpg1.jpg","2" => "jpg2.jpg")
)
);
具体来说,我对$data["index"]["title"]
具有图像标签的对象执行了此操作:
"title" => array("type" => "image", "value" => "<img src = 'logo.png' alt=''>"),
而这$data["gallery1"]["title"]
有一个文本字符串:
"title" => array("type" => "text", "value" => "Gallery 1"),
这将帮助您在事物的渲染方面更好地处理每种情况。所以你可以有如下代码:
if ($data["gallery1"]["title"]["type"] == "image") {
echo $data["gallery1"]["title"]["value"] . "<br clear="all" />";
}
else if ($data["gallery1"]["title"]["type"] == "text") {
echo "<h1>" . $data["gallery1"]["title"]["value"] . "</h1>";
}
上面的示例表明,如果您在数据源中标记类型,则可以在渲染时对每种类型执行不同的操作。如果你觉得工作量太大,那是公平的。但是如果没有明确区分它们的方式,在值中混合数据类型绝不是一个好主意。