PHP:如何从 URL 中删除所有类型的扩展名(包括句点)

PHP: How to strip all types of extensions from URL (incl. period)

我是 PHP 的新手,希望有人能帮助我。

我希望 PHP 提供我网站 当前页面的名称 。 重要的是我需要这个没有任何前导斜杠和任何尾随扩展名等,只是简单的页面名称。

示例:
页面的 URL 是 http://www.myurl.com/index.php?lang=en 在这种情况下,它应该只 return "index".

我找到了一种使用以下方法去除前导部分的方法,但很难去除尾随部分,因为这是可变的(它可以只是 .php.php?lang=en.php=lang=de 等)。

$pageName = basename($_SERVER["REQUEST_URI"]);

我唯一找到的是以下内容,但这不包括变量扩展部分:

$pageName = basename($_SERVER["REQUEST_URI"], ".php");

有人能告诉我如何去掉结尾部分吗?

非常感谢, 麦克

A tutorial on how to do it

With an .htaccess file you can:

Redirect the user to different page

Password protect a specific directory

Block users by IP Preventing hot

linking of your images

Rewrite URIs

Specify your own Error Documents

一种可能的方法是:

$url = "http://www.myurl.com/index.php?lang=en";

preg_match('/\/([\w-_]+)\.php/i',$url,$match);
echo $match[1];

如果您需要有关正则表达式的帮助,请看这里: https://regex101.com/r/cM8sS3/1

这是最简单的解决方案。

$pagename = basename($_SERVER['PHP_SELF']);
$a = explode(".",$pagename);
echo $a[0];

您可以使用 parse_url in combination with pathinfo:

<?php
$input  = 'http://www.myurl.com/index.php?lang=en';
$output = pathinfo(parse_url($input, PHP_URL_PATH), PATHINFO_FILENAME); 

var_dump($output); // => index

演示:https://eval.in/382330

试试这个

//return url
$pageName = base64_decode($_GET["return_url"]);

function Url($pageName) {
    $pageName= strtolower($pageName);
    $pageName= str_replace('.',' ',$pageName);
    $pageName= preg_replace("/[^a-z0-9_\s-]/", "", $pageName);
    $pageName= preg_replace("/[\s-]+/", " ", $pageName);
    $pageName= preg_replace("/[\s_]/", "-", $pageName);
    return $pageName ;
}
$cleanurl=Url($pageName);
echo $cleanurl;

在这种情况下,我只会使用正则表达式。这是代码:

$pagename = basename("http://www.myurl.com/index.php?lang=en");

$pagename = preg_replace("/\..*/", "", $pagename);

您可以在此处查看工作演示:https://ideone.com/RdrHzc

第一个参数是一个表达式,它匹配后跟任意数量字符的文字句点。第二个参数告诉函数用空字符串替换匹配的字符串,最后一个参数是要操作的变量。