使用preg_replace将绝对值转换为相对URL

时间:2011-08-10 20:08:12

标签: php regex preg-replace

(我搜索过,发现很多关于转换相对于绝对网址的问题,但绝对没有关于绝对网址的问题。)

我想从表单字段中获取输入,最后得到一个相对URL。理想情况下,这将能够处理以下任何输入并以/page-slug结束。

  • http://example.com/page-slug
  • http://www.example.com/page-slug
  • https://example.com/page-slug
  • https://www.example.com/page-slug
  • example.com/page-slug
  • /page-slug
  • 也许更多我不想......?

编辑:我也希望这适用于相对网址为例如/page/post(即具有多个斜杠的东西)。

4 个答案:

答案 0 :(得分:9)

如果您一直在使用网址,请查看parse_url。具体做法是:

parse_url($url, PHP_URL_PATH)

仅供参考,我根据您的所有输入对其进行了测试,除了以下所有内容之外,它都有效:example.com/page-slug

答案 1 :(得分:2)

试试这个正则表达式。

#^              The start of the string
(
   ://          Match either ://
   |            Or
   [^/]         Not a /
)*              Any number of times
#

并用空字符串替换它。

$pattern = '#^(://|[^/])+#';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);

答案 2 :(得分:1)

我认为你想要在主机名后面的URL部分,你可以使用parse_url

$path = parse_url($url, PHP_URL_PATH);

请注意,这会在主机名后面显示网址的整个,因此http://example.com/page/slug会提供/page/slug

答案 3 :(得分:0)

如果您了解自己的应用程序,我会以一种简单的方式执行此操作。我会使用正则表达式来搜索

[a-z].([(com|org|net)])