我更新了一个网站,在我的页面中发现了一个烦人的问题我解决了它,但我真的不相信它应该是这样的。对我来说,我不是PHP专家——有人能解释我的奇怪行为吗?
我有这个代码:
if($Menu == "index"){
{if ($Language == "UK"){echo "<td><h1>Welcome</h1>";}
{if ($Language == "NL"){echo "<td><h1>Welkom </h1>";}
}
else
// if $menu was not index it displayed a hyperlink to Welcome page
这里的字符串在检查语言时工作得很好。$Menu的比较不起作用,即使它包含单词索引由于整个页面都是动态生成的,一些字符串操作在之前完成我认为也许吧,尽管我也用测试过
echo "dump Menu variable " . $Menu
这导致jut在页面上显示单词索引。所以字符串类型或类似的东西可能会出错
所以我试验了
if($Menu === "index")
运气不佳
好吧,我终于像这个一样解决了它
if (strpos($Menu,'index' !==false)
真的应该这样做吗???,我觉得不太舒服。对我来说,奇怪的是,对于$Language来说,它只是正常工作(在我看来)。这里是否存在某种类型问题,或者可能是不需要的结尾''n我是否可以规范化字符串以进行可读字符串比较的内容,或者使用不同类型的相等运算符。在我看来,$Menu可以更容易地处理。也许是重新格式化,但我在这里不确定。
看起来您的索引字符串确实包含空格,而不是strpos,您可以使用trim( $Menu )
来消除它们。
但最好的办法是防止它们的发生。您可以尝试使用echo "dump Menu variable |" . $Menu ."|";
或仅使用var_dump( $Menu )
来识别其他字符。
也许你可以张贴,你的代码段$Menu是填写。
(抱歉,不能只是评论)
您可以尝试类似的
$Menu = trim($Menu);
$Language = trim($Language);
$langAllowed = ["UK", "NL"]; // zero element is default;
if(!in_array($Language, $langAllowed )) $Language = $langAllowed[0];
$menuLocales=[
"index" => [
"UK"=>"Welcome",
"NL"=>"Welkom "
],
"default"=>[
"UK"=>"Welcome default (no index)",
"NL"=>"Welkom default (no index)"
]
];
$MenuIndex = isset($menuLocales[ $Menu ]) ? $Menu : "default";
echo "<td><h1>".$menuLocales[ $MenuIndex ][ $Language ]."</h1>";