Ссылка на MultiLanguage PHP

Так что у меня небольшая проблема. Все в этом коде работает, но когда кто-то помещает ссылку, подобную этой ? 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 заставит использовать значение по умолчанию.

Разве вы не получаете предупреждение о том, что он не может включать файл lang_enASa.php или у вас не включены error_reporting и отображение ошибок?

Magnus Eriksson 30.05.2018 16:24

@Magnus Eriksson Нет

user9870819 30.05.2018 16:26

Тогда я бы порекомендовал вам прочитать этот пост: Как мне отобразить ошибки PHP?. Это очень важно, когда дело доходит до отладки. На самом деле произошло то, что константа _TITLE не была определена (поскольку она не могла загрузить файл, который ее определяет), поэтому PHP предположил, что вы хотели использовать '_TITLE' (строку), и повторил это за вас.

Magnus Eriksson 30.05.2018 16:27

Ваш код ужасно небезопасен

user70960 30.05.2018 16:30

@ user70960 как я могу сделать его более безопасным?

user9870819 30.05.2018 16:34

@Peter Вы не должны обращаться к GET напрямую, используйте filter_input вместо этого, чтобы очистить строку, а затем проверить, разрешен ли этот язык (например, языковой файл существует или находится где-то в списке языков).

Tomáš Vališka 30.05.2018 16:44

Подскажите, что именно нужно заменить? Я не хочу делать неправильные вещи

user9870819 30.05.2018 16:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
79
1

Ответы 1

Перед вызовом include необходимо проверить, существует ли языковой файл для данного языка.

// Include Language file
if (isset($_SESSION['lang']) && file_exists("lang_".$_SESSION['lang'].".php")){
 include "lang_".$_SESSION['lang'].".php";
}else{
 include "lang_en.php";
}

Спасибо;) Это сработало

user9870819 30.05.2018 16:25

Другие вопросы по теме