Как удалить часть URL - PullRequest
       7

Как удалить часть URL

0 голосов
/ 16 февраля 2012

Допустим, мой URL-адрес:

http://example.com/forum/index.php?topic=53.msg251#msg251

В этой части я не могу понять, как удалить:

.msg251#msg251

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

 $linkraw = $items->link;
 $linkpattern = '/^.msg247#msg247/';
 $link = preg_match($linkpattern, $linkraw);

Как правильно это сделать?Я пытаюсь учиться.

Ответы [ 4 ]

4 голосов
/ 16 февраля 2012

Строковых функций strrpos и substr достаточно для этой задачи. И, конечно, быстрее.

 $link = substr($linkraw, 0, strrpos($linkraw, "."))

Пояснение:

  1. strrpos находит позицию . от конца строки.
  2. substr извлекает подстроку до позиции ., найденной на предыдущем шаге.

Когда это будет работать?

Работает на http://example.com/forum/index.php?topic=53.msg251#msg251
Работает на http://example.com/forum/index.php?topic=53.new#new
Но не на http://example.com/forum/index.php?topic=53.msg251#msg251.new#new

1 голос
/ 16 февраля 2012

Если вы хотите удалить, используйте preg_replace :

$link = preg_replace('/\..*?$/', '', $linkraw);
0 голосов
/ 16 февраля 2012

Довольно просто, используя функцию http_build_url (требуется PECL pecl_http> = 0.21.0).

<?php
    $url = 'http://example/forum/index.php?topic=53.msg251#msg251';
    echo http_build_url($url, null, HTTP_URL_STRIP_FRAGMENT);
?>
0 голосов
/ 16 февраля 2012

"preg_match () возвращает количество совпадений с образцом. Это будет либо 0 раз (без совпадений), либо 1 раз, потому что preg_match () остановит поиск после первого совпадения. Preg_match_all () наоборотпродолжить, пока не достигнет конца субъекта. preg_match () возвращает FALSE, если произошла ошибка. "

link

Preg_Match проверяет, только существует ли шаблон встрока.Это ничего не удаляет.

Вы можете использовать str_replace () для замены этой части

$link = str_replace(".msg251#msg251", "", $linkraw);
...