2015-07-08 2 views
2

Итак, я динамически генерируемые страницы, которые следующим образом следующий формат:Вывести часть URL в PHP

http://example.com/name/first_name/last_name/John%2C+Smith 

Что такое код PHP для вывода последней частью адреса?

так, это похоже на «Джон, Смит».

Большое вам спасибо.

EDIT:

я понял, что URL закончился с другим / и ответы, приведенные ниже, не забрать его. Какое изменение я должен сделать?

http://example.com/name/first_name/last_name/John%2C+Smith/ 

EDIT 2:

Таким образом, ссылка динамически генерируется в следующем:

href="http://example.com/name/first_name/last_name/<?php echo $full_name ?>" 
+0

Я думаю, что это был дан ответ здесь: [Http: // StackOverflow. com/questions/11257232/reverse-htmlspecialchars] – gene

ответ

0

Вы можете использовать parse_url со вторым параметром PHP_URL_PATH

$url = urldecode("http://example.com/name/first_name/last_name/John%2C+Smith"); 
$arr = array_filter(explode('/',parse_url($url, PHP_URL_PATH))); 
print_r(end($arr)); 

Отредактировано:

согласно требованию для динамического URL вы можете использовать

$url = urldecode("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"); 
+0

explode возвращает массив в соответствии с http://php.net/manual/en/function.explode.php. Вы действительно не должны вызывать массив - $ str. – gene

+0

Это простая переменная, которую я использовал для лучшего удобства. Я обновлю ее до $ arr @gene –

+0

. Я понял, что в конце есть '/', и мне было интересно, какое изменение я должен сделать для этого код для работы. Спасибо. –

1

Сплит URL-адрес, получить последний фрагмент затем URL декодировать:

<? 
$urlarray=explode("/",$url); 
$end=$urlarray[count($urlarray)-1]; 
$end=urldecode($end); 
//go on using $end then 
?> 
+0

Вы также можете запустить 'array_reverse', упростить шаг, $ urlarray = array_reverse (explode ("/", $ url)); echo urldecode ($ urlarray [0]); '. – chris85

+0

Только что заметил, что URL-адрес заканчивается другим '/' ("/ John% 2C + Smith /"). Какое изменение я должен сделать, чтобы он работал? (Я обновил вопрос) –

+0

@steveKim '$ url = trim ($ url, '/');' before 'explode' – Hkan

1

Вы можете сделать это с помощью регулярного выражения.

echo preg_replace_callback('~.*/(.*)~', 
    function($matches) { 
      return urldecode($matches[1]); 
    }, 
    'http://example.com/name/first_name/last_name/John%2C+Smith'); 

Regex демо: https://regex101.com/r/bE3bO5/1

Выход:

Джон Смит

Update:

echo preg_replace_callback('~.*/(.+)~', 
function($matches) { 
    return rtrim(urldecode($matches[1]), '/'); 
}, 
'http://example.com/name/first_name/last_name/John%2C+Smith/'); 
+0

Я понял, что в конце есть'/', и мне было интересно, какое изменение я должен сделать он заказывает, чтобы код работал. Спасибо. –

+0

Обновление написано, что в конце должно учитываться '/' или no '/'. – chris85

+0

У меня вопрос. URL-адрес динамически генерируется таким образом, что последняя часть всегда различна, например 'http: // example.com/name/first_name/last_name/Mike% 2C + Tyson /'. В этом случае будет ли вышеприведенный ответ? (Я отредактировал свой вопрос, см. «РЕДАКТИРОВАТЬ 2», пожалуйста) –

Смежные вопросы