<?php
$url = explode('/',$_SERVER['REQUEST_URI']);
$dir = $url[1] ? $url[1] : 'home';
?>
<body id="<?php echo $dir ?>">
这会将 http://domain.tld/blog/home 转换为 “blog”(URL 结构的第二级)。如果位于根目录,则会返回 “home”。
以下是一种替代方法
<?php
$page = $_SERVER['REQUEST_URI'];
$page = str_replace("/","",$page);
$page = str_replace(".php","",$page);
$page = str_replace("?s=","",$page);
$page = $page ? $page : 'index'
?>
这会将 http://domain.tld/blog/home 转换为 “domaintldbloghome”,这更加具体。它还会删除“.php”文件扩展名和默认的 WordPress 搜索参数。
更安全的方法
function curr_virtdir($echo=true){
$url = explode('/',$_SERVER['REQUEST_URI']);
$dir = $url[1] ? $url[1] : 'home'; // defaults to this if in the root
$dir = htmlentities(trim(strip_tags($dir))); // prevent injection into the DOM through this function
if ($echo) echo $dir;
return echo $dir; // ie. curr_virtdir(false)
}
function get_curr_virtdir(){
curr_virtdir(false);
}
返回“中间”目录值
在 https://css-tricks.org.cn 上,它将返回“home”
在 https://css-tricks.org.cn/snippets 上,它将返回“snippets”
在 https://css-tricks.org.cn/forums/viewforum.php?f=6 上,它将返回“forums”
strip_tags() 和 htmlentities() 函数可防止恶意代码插入 URL 并运行,例如:
<body id="foo"><script>alert("Booo");</script>
用于设置 Body ID 的用法
<body id="<?php curr_virtdir(); ?>">
其他用法
<?php
if ( get_curr_virtdir() == "store" ){
echo "Welcome to our awesome store !";
} elseif ( get_curr_virtdir() == "home" ){
echo "Welcome home :-)";
} else {
echo "Welcome on some other page";
}
?>
嗯,我使用了更简单的代码,没有考虑安全性。我应该重新考虑一下。
这非常有帮助。我正在使用替代方法(从顶部算起的第二个)。如何将 id 选择器保留在前两个目录中。假设我有:domain.com/products/ramps/singlefoldramps.html
是否会返回 id=”productsramps” 并且不使用 id 标签中的第三个目录?
我倾向于使用。这也会提供很多有用的信息,类似于这些示例
http://codex.wordpress.org/Template_Tags/body_class
在安全版本的第 6 行出现语法错误
return echo $dir; // 即 curr_virtdir(false)
有什么想法吗?
删除了“echo” - 似乎解决了问题。
function curr_virtdir($echo=true){
$url = explode(‘/’,$_SERVER[‘REQUEST_URI’]);
$dir = $url[1] ? $url[1] : ‘home’; // 如果位于根目录,则默认为此
$dir = htmlentities(trim(strip_tags($dir))); // 通过此函数防止注入 DOM
if ($echo) echo $dir;
return $dir;
这些技巧都不适合我,你们能帮我吗?
我的问题是,我有一个有两个子目录的网站,我想输出
example.com/dir1/dir2
example.com/dir1/dir2/dir3
第二个和第三个目录总是变化。如何使 ID 仅为第二个目录(dir2)?
提前感谢!
有没有办法从 body id 中去除 .php?