0

私は少し初心者の壁にぶつかっていて、それを乗り越える方法がわかりません。

DB から一部のコンテンツを表示する場合、このコンテンツには HTML タグが含まれます。それらのタグの 1 つが<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 に答える