Так что у меня небольшая проблема. Все в этом коде работает, но когда кто-то помещает ссылку, подобную этой ? lang = enASa вместо ? lang = en, по какой-то причине он просто показывает «определение» (не знаю, могу ли я назвать это определением). Пример: вместо отображения: Заголовок он показывает это: _ЗАГЛАВИЕ. Код такой:
<?php
session_start();
// Set Language variable
if (isset($_GET['lang']) && !empty($_GET['lang'])){
$_SESSION['lang'] = $_GET['lang'];
if (isset($_SESSION['lang']) && $_SESSION['lang'] != $_GET['lang']){
echo "<script type='text/javascript'> location.reload(); </script>";
}
}
// Include Language file
if (isset($_SESSION['lang'])){
include "lang_".$_SESSION['lang'].".php";
}else{
include "lang_en.php";
}
?>
На страницах я использую это (<?= _TITLE ?>) для замены слов:
<h3 style = "color: white" class = "subheading left"><?= _TITLE ?></h3>
А для перевода я использую этот файл (lang_en.php):
<?php
define("_TITLE", "Title");
Весь код работает нормально, и я надеялся, что кто-то сможет мне помочь, заставив использовать английский по умолчанию, когда язык недействителен. Пример: Если кто-то попробует www.example.com/index.php?lang=edadsa вместо www.example.com/index.php?lang=en, наш www.example.com/index.php заставит использовать значение по умолчанию.
@Magnus Eriksson Нет
Тогда я бы порекомендовал вам прочитать этот пост: Как мне отобразить ошибки PHP?. Это очень важно, когда дело доходит до отладки. На самом деле произошло то, что константа _TITLE не была определена (поскольку она не могла загрузить файл, который ее определяет), поэтому PHP предположил, что вы хотели использовать '_TITLE' (строку), и повторил это за вас.
Ваш код ужасно небезопасен
@ user70960 как я могу сделать его более безопасным?
@Peter Вы не должны обращаться к GET напрямую, используйте filter_input вместо этого, чтобы очистить строку, а затем проверить, разрешен ли этот язык (например, языковой файл существует или находится где-то в списке языков).
Подскажите, что именно нужно заменить? Я не хочу делать неправильные вещи



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Перед вызовом include необходимо проверить, существует ли языковой файл для данного языка.
// Include Language file
if (isset($_SESSION['lang']) && file_exists("lang_".$_SESSION['lang'].".php")){
include "lang_".$_SESSION['lang'].".php";
}else{
include "lang_en.php";
}
Спасибо;) Это сработало
Разве вы не получаете предупреждение о том, что он не может включать файл
lang_enASa.phpили у вас не включены error_reporting и отображение ошибок?