2016-10-30 9 views
0

プロジェクトの場合は、ウェブサイトのコンテンツを取得してHTMLコードを変更する必要があります。そのウェブサイトのすべてのリンクを自分のものに置き換える必要があります。私はを使用しました。リンクには時々クラスが割り当てられていることがわかりました。preg_replaceすべてのハイパーリンクの前に自分のウェブサイトを追加する

私はpreg_replace機能を試して、毎hrefリンクの前に自分のウェブサイトを追加しました。これは<a></a>タグの間にもあります。 の取得したウェブサイトにhref=""またはhref=''が含まれているかどうかは関係ありません。

$content = preg_replace('~(<a\b[^>]*\shref=")([^"]*)(")~igs', '\1http://website.com/fetch.php?url=\2\3', $content); 

これは動作せず、エラーが見つかりません。これは次のように振る舞う必要があります。

<a class="link" href="http://google.com">Google</a> 

<a class="link" href="http://website.com/fetch.php?url=http://google.com">Google</a> 

に有効にする必要があり、誰かが私にエラーを見つけることができますか?前もって感謝します。

+1

は、正規表現を使用しないでください、あなたは 'str_replace'で見つかった同様の問題に遭遇しますが。パーサーを使用します。また、 'preg_replace_callback'を必要としない関数を使用しない場合、' preg_replace'が置き換えられます。また、 'g'修飾子もPHPにはありません。関数はグローバルです。 – chris85

+0

置換文字列に '$ 1'、' $ 2'などを使用することをお勧めします。 – Barmar

+1

[PHPでHTML/XMLをどのように解析して処理するのですか?](http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php ) – chris85

答えて

0

たくさんの場合はが足りない正規表現を使用しないでください。各文書をDOMツリーに読み込んで(html5 DOM parserを実行)、XPathを使用してhref属性を持つすべてのリンクを取得して更新し、結果を保存します。

0

だけsimplexmlpreg_replace

 <?php 

      $string= '<a class="link" href="http://google.com">Google</a>'; 

      $a = new SimpleXMLElement('<a class="link" href="http://google.com">Google</a>'); 

      $newurl="http://website.com/fetch.php?url=".urlencode($a['href']); 

      $pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/"; 

      $body = preg_replace($pattern,$newurl,$string); 

      echo $body; 


     ?> 

OUTPUT使用:

<a class="link" href="http://website.com/fetch.php?url=http%3A%2F%2Fgoogle.com">Google</a> 
関連する問題