Странный эффект сравнения строк PHP, это может быть сделано лучше?

Я обновил веб-сайт и обнаружил раздражающую проблему на своих страницах
Я решил это, но я не совсем уверен, что это должно выглядеть так.
Для меня я не эксперт по 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 не сработало, даже если оно содержало слово index
Поскольку вся страница была сгенерирована на лету и некоторые строковые операции были выполнены ранее
Я предположил, что, может быть, несмотря на то, что я также проверил это с

   echo "dump Menu variable " . $Menu

Это привело к тому, что на странице появилось слово «индекс». Так что может быть что-то не так в типах строк или что-то подобное

Итак, я экспериментировал с

  if($Menu === "index")

Неудачно

Ну, я наконец-то решил это так

  if (strpos($Menu,'index' !==false)

Так ли это на самом деле? Мне не очень удобно с этим.
Что касается меня, то странно, что для $ Language он просто работает как надо (на мой взгляд).
Есть ли здесь какая-то проблема типа, или, возможно, нежелательные окончания \ n могли бы я, возможно, нормализовать строку, чтобы сделать содержимое читаемых сравнений строк, или оператор равенства другого типа. Как мне кажется, $ Menu можно было бы обрабатывать проще. Может быть, переформатировать или я не уверен здесь.

0

Решение

Похоже, что ваша index-String содержит пробелы, вместо strpos вы можете использовать trim( $Menu ) чтобы избавиться от них.

Но лучше всего было бы предотвратить их возникновение. Вы могли бы попробовать echo "dump Menu variable |" . $Menu ."|"; или просто var_dump( $Menu ) определить дополнительные символы.

Возможно, вы могли бы опубликовать свой код-сегмент, где заполнено $ Menu.

(извините, я не могу просто комментировать)

1

Другие решения

Вы можете попробовать что-то вроде этого

$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>";
0

По вопросам рекламы [email protected]