如果我在用户输入的名为$url
的变量中有多个这样的网址:
http://www.example.com/home
/home
?home=true
home/
所有这些都应该在www.example.com
网站下,
如何将网址替换为正确的形式?
这样的事情:
http://www.example.com/home => http://www.example.com/home
/ihome => http://www.example.com/ihome
?home=true => http://www.example.com/ihome?home=true
home/ => http://www.example.com/ihome/home/
最后都是当前页面/ihome
。
答案 0 :(得分:0)
我假设你的问题是relative URLs。
假设您位于http://example.com/home位置,并且有一个指向about page的链接,该链接已与http://example.com/about硬链接。这可以通过相对链接<a href="about">About</a>
在'home.php'(或托管/ home的任何地方)中访问。这遵循标准目录协议,并且不会有太大变化。我提供的链接中记录了大量这些示例以获取更多信息。
编辑:最初的问题太过模糊,我的回答是真实的问题。正确答案,如何更换,如下。
使用str_replace()
,如下面的评论中所示。一个例子,关于如何转换“/ ihome”。假设我们位于http://example.com/about位置。
$body = ...; // assuming this is going through whole php document
$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$tokens = explode('/', $url);
array_pop($tokens); // remove "/about"
$url = implode("", $tokens);
str_replace("/ihome", $url . "/ihome", $body);
最后一行肯定有争议,但这应该有效。如果您要检查多个链接,则可能需要采用正则表达式方法(即任何定义为“/ sub”的链接或任何查询“?query”)。
答案 1 :(得分:0)
Theres可能是在每个循环中使用单个preg_replace函数执行此操作的方法,但是这样的事情应该可以解决问题。
<?php
foreach($urls as $key => $val)
if(!preg_match('/^http\:\/\/www\.example\.com\//', $val))
$url[$key] = 'http://www.example.com/'.ltrim($val, '/');