如何删除部分URL

时间:2012-02-16 13:57:11

标签: php url preg-match

假设我的网址是:

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

这部分在这里,我无法弄清楚如何删除:

.msg251#msg251

我确实尝试过,我不确定我是否接近做得正确。

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

这样做的正确方法是什么?我正在努力学习。

4 个答案:

答案 0 :(得分:4)

字符串函数strrpossubstr足以完成此任务。它肯定更快。

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

说明:

  1. strrpos从字符串末尾找到.的位置。
  2. substr提取子字符串,直到上一步中找到.的位置。
  3. 什么时候有效?

    适用于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 :(得分:1)

如果要删除,请使用preg_replace

$link = preg_replace('/\..*?$/', '', $linkraw);

答案 2 :(得分:0)

使用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);
?>

答案 3 :(得分:-1)

  

“preg_match()返回模式匹配的次数。这将是   0次(不匹配)或1次因为preg_match()将停止   在第一场比赛后搜索。 preg_match_all()恰恰相反   继续,直到它到达主题的结尾。 preg_match()返回   如果发生错误,则为FALSE。“

link

Preg_Match仅检查字符串中是否存在模式。它不会删除某些东西。

您可以使用str_replace()替换该部分

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