Выборка параметров запроса URL внутри php case

#php

#php #синтаксический анализ #url

Вопрос:

У меня есть ниже index.php файл, который будет обрабатывать все маршруты:

 <!DOCTYPE html>
<html>
<body>

    <?php
    $request=$_SERVER['REQUEST_URI'];
switch($request){
    case '/': require __DIR__.'/index1.php';break;
    case '/home':require __DIR__.'/views/home.php';break;
    default: echo("wrong");}
?>
</body>
</html>
  

И ниже приведен файл home.php:

 <html>
<body>
<?php
$str=$_SERVER['QUERY_STRING'];
echo($str);
?>
</body>
</html>
  

В случае отсутствия строк запроса вышеуказанная настройка работает нормально. Но как я буду включать условие, при котором пользователь попадает 127.0.0.1/home?1234 . В этом случае любой оператор case станет недействительным и вернет неверный результат. Как бы мне изменить это, чтобы он переходил к соответствующему маршруту вместе со строкой запроса?

Заранее спасибо!

Ответ №1:

Не используйте регулярные выражения или строковые функции. Используется parse_url для извлечения пути (или практически любой части) из URL-адреса:

 $path = parse_url("/home?1234", PHP_URL_PATH);
# $path will be "/home"
switch ($path) {
   ...
  

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

1. И как я буду извлекать строку запроса, 1234?

2. Передать PHP_URL_QUERY или $_SERVER["QUERY_STRING"]

Ответ №2:

Используйте explode

 $uri = explode('?', $_SERVER['REQUEST_URI'], 2);
$str = $uri[0]