Как я могу извлечь следующие части, используя функцию PHP:
Ex.1
https://stackoverflow.com/users/test/login.php?q=san&и = пост # сверху
Пример: 2 stackoverflow.com/users/test/login.php?q=san&и = пост # сверху
Пример: 3 /users/test/login.php?q=san&и = пост # сверху
Пример: 4 / users / test / login? Q = san&и = пост # сверху
Пример: 5 вход? Q = san&и = пост # сверху
Пример: 6? Q = san&и = сообщение
Я проверил функцию parse_url, но не возвращает то, что мне нужно. Поскольку я новичок в PHP, мне было трудно. Если у вас есть идеи, пожалуйста, ответьте.
Заранее спасибо.
PHP обеспечивает parse_url
функция.
Эта функция анализирует URL и возвращает ассоциативный массив, содержащий
любой из различных компонентов URL, которые присутствуют.Эта функция не предназначена для проверки заданного URL, она только ломает
это в перечисленные выше части. Частичные URL также принимаются,
parse_url()
старается разобрать их правильно.
Вы можете увидеть тестовые случаи выполнено здесь.
$urls = array(
"https://stackoverflow.com/users/test/login.php?q=san&u=post#top",
"/users/test/login.php?q=san&u=post#top",
"?q=san&u=post#top",
"login.php?q=san&u=post#top",
"/users/test/login?q=san&u=post#top",
"login?q=san&u=post#top");
foreach( $urls as $x ) {
echo $x . "\n";
var_dump( parse_url($x) );
}
Я использую это, чтобы найти рут и webroot
<?php
/**
* @brief get paths from the location where it was executed.
*/
class PathHelper {
/**
* @brief This function tries to determine the FileSystem root of the application. (needs to be executed in the root)
* @return string
*/
public static function locateRoot($file) {
$dir = dirname($file);
/** FIX Required for WINDOWS * */
$dir = preg_replace('/\\\\/', '/', $dir);
$dir = preg_replace('/\\\/', '/', $dir);
return $dir;
}
/**
* @brief This function tries to determine the WebRoot. (needs to be executed in the root)
* @return string
*/
public static function locateWebroot($file) {
$docroot = $_SERVER['DOCUMENT_ROOT'];
$dir = dirname($file);
if ($dir == $docroot) {
$webroot = "";
} else {
$webroot = substr_replace($dir, '', 0, strlen($docroot));
}
/** FIX Required for WINDOWS * */
$webroot = preg_replace('/\\\\/', '/', $webroot);
$webroot = preg_replace('/\\\/', '/', $webroot);
return $webroot;
}
}
Я установил это как константу, чтобы я мог использовать его во всем приложении.
Например:
Для меню вы можете сделать что-то вроде этого:
// the requested url
$requestedUrl = $_SERVER['REQUEST_URI'];
// remove the webroot from the requested url
$requestedUrl = str_replace(WEBROOT, "", $_SERVER['REQUEST_URI']);
// take away the / if they still exist at the beginning
$requestedUrl = ltrim($requestedUrl, "/");
Тогда я получил это:
index.php? Контроллер = Пользователь&Действие = Обзор
Это соответствует моему URL одного из пунктов моего меню.
Вы можете использовать разнесение по этому последнему URL, чтобы найти все другие значения, которые вы хотите.
Редактировать: вероятно, лучше использовать parse_url (). Я не привык ко всем функциям в PHP, но если ничего не работает, то это, по крайней мере, запасной вариант.