0

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

当显示来自数据库的某些内容时,该内容将包含 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;

提前致谢。

4

2 回答 2

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/
)
于 2013-08-09T16:47:29.767 回答
0

我会简单地爆炸/附加2012_2013在正确的位置,然后内数组。

所以是这样的:

$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;

有了以上内容,我假设您的域格式没有改变。

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

于 2013-08-09T15:31:35.977 回答