Как получить только последнее слово для переменной в запросе PHP "$ _SERVER ['REQUEST_URI']"? - PullRequest
1 голос
/ 15 июля 2010

Я использую WAMP и корневая папка моей страницы: http://localhost/projects/bp/

В приложении Worpress я хочу присвоить уникальный идентификатор тегу body каждой страницы. Поэтому я сделал следующее:

<?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 ?>">

Когда я щелкнул страницу About, URL изменился на следующий: http://localhost/projects/bp/about и $page показали следующее значение: projectsbpabout

Что я могу сделать, чтобы $ page просто показывал последнее слово URL. В данном случае, about, я не хочу часть projectsbp)?

Нужно ли что-то менять в маршрутизации Wordpress?

Ответы [ 4 ]

5 голосов
/ 15 июля 2010

Я бы использовал для этого встроенные в PHP функции синтаксического анализа пути.

Используйте parse_url () , чтобы обрезать запрос и получить только часть пути:

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

(parse_url используется для разбора полных URL-адресов, но для этого он должен работать нормально. Второй параметр доступен начиная с PHP 5.1.2.)

Затем используйте basename () , чтобы извлечь имя файла:

$pagename = basename($path, ".php");  // Will remove `.php` suffix

Дополнительные тысячи

В зависимости от структуры вашего сайта, этот метод не обязательно будет использовать для уникальных идентификаторов. Что если about является подстраницей в /bp и /bc? (Если это возможно в Wordpress.) У вас будет две разные страницы с одинаковым идентификатором. В этом случае вы можете использовать полный путь в качестве идентификатора, преобразуя косую черту в подчеркивание:

<body id="projects_bp_about">

также из собственного опыта, я рекомендую использовать для этого классы, чтобы избежать коллизий идентификаторов, если страница названа как уже существующие элементы на странице!

<body class="projects_bp_about">
2 голосов
/ 15 июля 2010

Поскольку / является вашим разделителем, сначала создайте массив всех незакрепленных частей: $parts = explode('/', $_SERVER['REQUEST_URI']); Теперь вы просто хотите последний элемент: $last_part = end($parts); конечно, это также можно сделать за один раз:

$last_part = end(explode('/', $_SERVER['REQUEST_URI']));

0 голосов
/ 15 июля 2010

вместо использования str_replace вы можете использовать ..

$ pageArr = explode ("/", $ page);

это даст вам массив с тремя значениями, которые вы можете захватить последним, как приблизительно

0 голосов
/ 15 июля 2010

, чтобы получить только последний бит, который вы можете использовать

$page = array_pop(explode('/', $_SERVER['REQUEST_URI']));

взорвать строку с помощью '/' и получить последний кусок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...