如何使用PHP函数提取以下部分:
实施例1, https://stackoverflow.com/users/test/login.php?q=san&u=post#top
Ex:2 stackoverflow.com/users/test/login.php?q=san&u=post#top
Ex:3 /users/test/login.php?q=san&u=post#top
例如:4 / users / test / login?q = san& u = post#top
Ex:5登录?q = san& u = post#top
Ex:6?q = san& u = post
我检查了parse_url函数,但没有返回我需要的内容。因为,我是PHP的初学者,对我来说很难。如果您有任何想法,请回答。
提前致谢。
答案 0 :(得分:1)
PHP提供parse_url
函数。
此函数解析URL并返回包含的关联数组 存在的URL的任何各种组件。
此功能并不意味着验证给定的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) ); }
会尽力正确解析它们。
您可以看到测试用例executed here。
TestActivity
答案 1 :(得分:1)
我用它来找到root和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?controller = User&amp; action = overview
这相当于我的某个菜单项的网址。 您可以在最后一个URL上使用explode来查找所需的所有其他值。
编辑:使用parse_url()可能更好。我不习惯PHP中的所有函数,但如果没有任何作用,那么这至少是一个后备。