php удаляет первые параметры из URL-пути

#php

#php

Вопрос:

У меня многоязычная система, и мне нужно удалить короткий префикс локали по умолчанию из URL-адреса. Мне нужно проверить, получает ли сессия префикс :

 if(Session::get('prefix')) {
    $url = urldecode(http_build_query($_GET, '', 'amp;'));
} else {
    $url = ''; //This Line
}

echo $url;
//output is: url=fa/account/login
  

Теперь в действии ($url) Я вижу этот вывод:

 en/
en/account/login
en/account/dashboard
  

Теперь мне нужно удалить en из пути URL, если не обнаружен префикс сеанса, подобный этому.

 account/login
account/dashboard
  

какой метод лучше всего использовать?!

Комментарии:

1. Вам нужно добавить код языка в сеанс и использовать $_SESSION['language_code'] непосредственно в кодах ссылок

2. @AlivetoDie: Конечно, но мне нужен этот URL-путь для обратного перенаправления на this.ie : для языка по умолчанию без префикса и другого языка с префиксом. примечание: я удаляю язык по умолчанию из URL.

3. Вы имеете в виду вот так? 3v4l.org/CGBVh

4. @Thefourthbird: у меня есть это: url= fa/ account /login

Ответ №1:

Вы могли бы создать массив всех ваших языков. Затем вы могли бы использовать explode и использовать косую черту в качестве разделителя.

Проверьте, есть ли первый элемент в массиве с языками. Если это так, удалите первый элемент из, $parts используя, например, array_shift, а затем снова соберите строку с помощью implode.

 $langs = ["en", "fa"];
$string = "fa/account/login";
$parts = explode('/', $string);

if (in_array($parts[0], $langs)) {
    array_shift($parts);
}
echo implode('/', $parts) . PHP_EOL; //account/login
  

Демонстрация Php

Комментарии:

1. Этот способ верен и работает. Но у меня проблема, если мой url = en/news/list?page=2amp;sort=desc таким образом не работает.

2. @harmonytalk Какой результат вы получаете, который у вас не работает? Вы тестировали это так? 3v4l.org/DJEVd

Ответ №2:

Вы можете определить массив в config/app.php со всеми языками, которые реализует ваше приложение. Например, вы можете добавить эту строку в свой config/app.php

 $languages  = ['en','fa'];
  

и теперь вы можете изменить свой код следующим образом :

 $url = urldecode(http_build_query($_GET, '', 'amp;'));
if(Session::get('prefix') == null) 
    $url = preg_replace("/^".implode(Config::get("app.languages"),"|")."//",'',$url);