2015-06-16 2 views
1

Я новичок в PHP и надеюсь, что кто-то может мне помочь.PHP: Как удалить все типы расширений из URL (включая период)

Я хочу, чтобы PHP дал мне имя текущей страницы моего сайта. Важно то, что мне это нужно без каких-либо косых черт и без каких-либо конечных расширений и т. Д., Просто имя простой страницы.

Пример:
URL-адрес страницы является http://www.myurl.com/index.php?lang=en В этом случае он должен возвращать только «индекс».

Я нашел способ избавиться от головной части, используя следующий, но есть проблемы, чтобы удалить заднюю часть, так как это является переменным (это может быть просто .php или .php?lang=en или .php=lang=de и т.д.).

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

Единственное, что я нашел это следующий, но это не распространяется на переменную часть расширения:

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

Может кто-нибудь сказать мне, как избавиться от задней части, а?

Большое спасибо заранее, Майк

+0

Если я правильно помню, это где-то в конфигурации htaccess. – Mox

+0

Спасибо - я не думаю, что это правильный подход. Мне просто нужно это для переменной внутри страницы, а не для самого самого URL. – keewee279

ответ

6

Вы можете использовать parse_url в сочетании с 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

+0

Это прекрасно - большое спасибо за вашу помощь! – keewee279

0

A tutorial on how to do it

С помощью файла .htaccess вы можете:

перенаправлять пользователя на другую страницу

Пароль защитить определенный каталог

Блок пользователей по IP Предотвращение горячей

увязывания изображений

Rewrite Юрис

Укажите ваши собственные документы об ошибках

+0

Спасибо - я не думаю, что это правильный подход. Мне просто нужно это для переменной внутри страницы, а не для самого самого URL. – keewee279

+0

Думаю, вам нужно изменить свой вопрос. потому что ваш вопрос требует удаления расширения. – Mox

2

Одним из возможных способов является:

$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

+0

Спасибо за это! – keewee279

2

вот простейшее решение.

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

+1

У этого есть проблемы, если '$ pagename' имеет периоды за пределами расширения, например. 'Foo.bar.php'. – Grokify

+0

Спасибо - это тоже здорово, но мне нужно покрыть и другие периоды (как упоминал Грокиф). – keewee279

+0

пользовательский код $ pagename = basename ($ _ SERVER ['PHP_SELF']); $ part = implode ('.', Explode ('.', $ Pagename, -1)); – kevin

0

Попробуйте

//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; 
0

Это ситуация, когда я просто использую регулярное выражение. Вот код:

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

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

Вы можете увидеть рабочую демо здесь: https://ideone.com/RdrHzc

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