0

まず、Web ページの html を取得してから、通常はページの左側または右側 (ページ本体ではなく) に表示される href リンクを削除しています。href リンクは削除されていますが、ラベルは削除されていません。

例:

<a href='http://test.blogspot.com/2012/11/myblog.html'>London</a>

リンクは削除されていますが、「ロンドン」などのラベルは削除されていません。HTMLソースの行全体を削除するにはどうすればよいですか? 私はそれに次のコードを使用しています:

$string = strip_tags($html_source_code, '<a>', TRUE); 

function strip_tags($text, $tags = '', $invert = FALSE) {
      preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags); 
      $tags = array_unique($tags[1]); 
      if(is_array($tags) AND count($tags) > 0) { 
        if($invert == FALSE) { 
          return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text); 
        } 
        else { 
          return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text); 
        } 
      } 
      elseif($invert == FALSE) { 
        return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text); 
      } 
return $text; 
}
4

2 に答える 2

0

あなたのコードを使用すると、Fatal error: Cannot redeclare strip_tags() が表示されます。

name 関数を my_strip_tags のようなものに変更するとうまくいきます。

function my_strip_tags($text, $tags = '', $invert = FALSE) {
      preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags); 
      $tags = array_unique($tags[1]); 
      if(is_array($tags) AND count($tags) > 0) { 
        if($invert == FALSE) { 
          return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text); 
        } 
        else { 
          return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text); 
        } 
      } 
      elseif($invert == FALSE) { 
        return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text); 
      } 
return $text; 
}

$html_source_code = "Beginning of content ... <a href='http://test.blogspot.com/2012/11/myblog.html'>London</a> ... end of content.";

echo "<p>".$html_source_code."</p>";

$string = my_strip_tags($html_source_code, '<a>', TRUE);

echo "<p>".$string."</p>"; 

それは印刷します:

コンテンツの始まり ...ロンドン... コンテンツの終わり。

コンテンツの始まり ... ... コンテンツの終わり。

于 2013-05-18T22:35:53.593 に答える
0
$link = "<a href='http://test.blogspot.com/2012/11/myblog.html'>London</a>";

function erraser($theLink, $checkTag){

    if(strpos($theLink, $checkTag) == true){

        for($i=0; $i< strlen($theLink); $i++){
        $link[$i] = '';
        return  $link[$i];
        }
       }else{
        return $theLink;
    }

}

さて、これを見てみましょう:

erraser()関数に 2 つのパラメーター、次にリンクの変数、およびリンクを認識するためのテキストを指定するだけで済みます。

echo erraser($link, 'href');を実行すると、リンクが削除され、return何も削除されません。ただし、----内部echo erraser($link, '----'); に渡すと、リンクlondonが発行されます。つまり、リンクであるかどうかを確認し、必要な機能を実行します。

于 2013-05-18T22:35:28.887 に答える