更改标签内的网址

时间:2013-08-09 15:06:03

标签: php regex hyperlink str-replace

我打了一个菜鸟墙,我不确定如何克服它。

当从数据库显示某些内容时,此内容将包含HTML标记。 其中一个标记是<a>链接。

其href将等于以下任何一项。

http://www.example.com
http://www.example.com/
http://www.example.com/some/other/stuff
/some/other/stuff
/
www.example.com
www.example.com/

我需要做什么,并且我已经尝试使用str_replace()的逻辑,但我不能让它100%正常工作......将所有上述链接转为此。

http://www.example.com/2012_2013
http://www.example.com/2012_2013/
/2012_2013/some/other/stuff
/2012_2013
www.example.com/2012_2013
www.example.com/2012_2013/

我的问题主要是转向

/some/other/stuff

/2012_2013/some/other/stuff

当我不知道/this/could/be是什么时,我如何找到它并在/2012_2013前加上

这似乎不起作用100%

$content = str_replace("http://www.example.com/","http://www.example.com/2012_2013/",$wData['field_id_2']);                                     
$content = str_replace('href="/"','href="/2012_2013/"',$content);
echo $content;

提前致谢。

2 个答案:

答案 0 :(得分:0)

我只需/ explode并将2012_2013添加到正确的位置,然后implode数组。

这样的事情:

$link = '<a href="http://www.example.com/some/other/stuff">http://www.example.com/some/other/stuff</a>';

$linkParts = explode('/', $link);
$linkParts[2] = $linkParts[2] . '/2012_2013';
$linkParts[7] = $linkParts[7] . '/2012_2013';

$finalLink = implode('/', $linkParts);

echo $finalLink;

通过上述我假设您的域格式不会改变。

这看起来像是一个数据库内容问题。最好在数据库中正确更新它们,你不需要摆弄输出。

答案 1 :(得分:0)

parse_url函数的帮助下,以下代码应该适合您。

$arr = array('http://www.example.com', 'http://www.example.com/',
'http://www.example.com/some/other/stuff', '/some/other/stuff',
'/some/other/stuff/', '/2012_2013/some/other/stuff', '/', 'www.example.com',
'www.example.com/');

$ret = array();
foreach ($arr as $a) { 
   if ($a[0] != '/' && !preg_match('#^https?://#i', $a))
      $a = 'http://' . $a;
   $url = parse_url ($a);
   $path = '';
   if (isset($url['path']))
      $path = $url['path'];
   $path = preg_replace('#^((?!/2012_2013/).*?)(/?)$#', '/2012_2013$1$2', $path );
   $out= '';
   if (isset($url['scheme'])) {
      $out .= $url['scheme'] . '://';
      if (isset($url['host']))
         $out .= $url['host'];
   }
   $out .= $path;
   $ret[] = $out; 
}

print_r($ret);

输出:

Array
(
    [0] => http://www.example.com/2012_2013
    [1] => http://www.example.com/2012_2013/
    [2] => http://www.example.com/2012_2013/some/other/stuff
    [3] => /2012_2013/some/other/stuff
    [4] => /2012_2013/some/other/stuff/
    [5] => /2012_2013/some/other/stuff
    [6] => /2012_2013/
    [7] => http://www.example.com/2012_2013
    [8] => http://www.example.com/2012_2013/
)