如何在PHP"$ _SERVER ['REQUEST_URI']"请求中获取变量的最后一个字?

ale*_*nco 1 php url wordpress uri

我正在使用WAMP,我的页面的根文件夹是: http://localhost/projects/bp/

在Worpress应用程序中,我想给body每个页面的标签赋予唯一的ID .所以我做了以下事情:

<?php
    $page = $_SERVER['REQUEST_URI'];
    $page = str_replace("/","",$page);
    $page = str_replace(".php","",$page);
    $page = str_replace("?s=","",$page);
    $page = $page ? $page : 'default'
?>

<body id="<?php echo $page ?>">
Run Code Online (Sandbox Code Playgroud)

当我单击该About页面时,URL将更改为以下内容:http://localhost/projects/bp/about$page显示以下值:projectsbpabout

我该怎么做才能让$ page只显示URL的最后一个字.在这种情况下,about我不想要这projectsbp部分)?

我是否必须在Wordpress路由中更改某些内容?

Pek*_*ica 5

我会使用PHP的内置路径解析函数来执行此操作.

使用parse_url()来切断查询并仅获取路径部分:

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
Run Code Online (Sandbox Code Playgroud)

(parse_url用于解析完整的URL,但应该可以正常工作.第二个参数自PHP 5.1.2起可用.)

然后使用basename()来提取文件名:

$pagename = basename($path, ".php");  // Will remove `.php` suffix
Run Code Online (Sandbox Code Playgroud)

额外的事情

根据您网站的结构,此方法不一定会生成唯一ID.如果about是在子页面/bp/bc?(如果可以在Wordpress中使用.)您将拥有两个具有相同ID的不同页面.在这种情况下,您可能希望使用完整路径作为标识符,将斜杠转换为下划线:

<body id="projects_bp_about">
Run Code Online (Sandbox Code Playgroud)

同样根据自己的经验,如果页面被命名为页面上已有的元素,我建议使用类来避免ID冲突!

<body class="projects_bp_about">
Run Code Online (Sandbox Code Playgroud)