web-dev-qa-db-ja.com

タグのIDを使用してタグとそのすべての内部HTMLを取り除く方法は?

次のhtmlがあります。

<html>
 <body>
 bla bla bla bla
  <div id="myDiv"> 
         more text
      <div id="anotherDiv">
           And even more text
      </div>
  </div>

  bla bla bla
 </body>
</html>

<div id="anotherDiv">から始まり<div>が終了するまで、すべて削除したいと思います。それ、どうやったら出来るの?

20
coderama

ネイティブDOM

$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$xPath = new DOMXPath($dom);
$nodes = $xPath->query('//*[@id="anotherDiv"]');
if($nodes->item(0)) {
    $nodes->item(0)->parentNode->removeChild($nodes->item(0));
}
echo $dom->saveHTML();
32
Gordon

次のようにpreg_replace()を使用できます。

$string = preg_replace('/<div id="someid"[^>]+\>/i', "", $string);
16
Haim Evgi

preg_replace()を使用したHaim Evgiの回答に加えて:

関数

_function strip_single_tag($str,$tag){

    $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str);

    $str=preg_replace('/<\/'.$tag.'>/i', '', $str);

    return $str;
}   
_

編集

処理するstrip_single_tag('<pre>abc</pre>','p');

_function strip_single_tag($str,$tag){

    $str1=preg_replace('/<\/'.$tag.'>/i', '', $str);

    if($str1 != $str){

        $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str1);
    }

    return $str;
}
_

リソース

https://Gist.github.com/rafasashi/59c9448f5467ea427fa

7
RafaSashi

Simple HTML DOM を使用することもできます。

PHP5 +で記述されたHTML DOMパーサーを使用すると、HTMLを非常に簡単に操作できます。

4
Sarfraz

特定のタグと属性を取り除くためにこれらを書きました。それらは正規表現であるため、すべてのケースで動作することが100%保証されているわけではありませんが、それは私にとって公正なトレードオフでした:

// Strips only the given tags in the given HTML string.
function strip_tags_blacklist($html, $tags) {
    foreach ($tags as $tag) {
        $regex = '#<\s*' . $tag . '[^>]*>.*?<\s*/\s*'. $tag . '>#msi';
        $html = preg_replace($regex, '', $html);
    }
    return $html;
}

// Strips the given attributes found in the given HTML string.
function strip_attributes($html, $atts) {
    foreach ($atts as $att) {
        $regex = '#\b' . $att . '\b(\s*=\s*[\'"][^\'"]*[\'"])?(?=[^<]*>)#msi';
        $html = preg_replace($regex, '', $html);
    }
    return $html;
}
1
Aram Kocharyan

drpckenによる発言

あなたが持っていると仮定します

$ title = "投稿の管理";

次に、それをstrip_tags($ title、 'title');として使用できます。

投稿を管理するだけです

1
Vinay Sikarwar

strip_tags()関数はあなたが探しているものです。

http://us.php.net/manual/en/function.strip-tags.php

0
ItsPronounced

これはどう?

// Strips only the given tags in the given HTML string.
function strip_tags_blacklist($html, $tags) {
    $html = preg_replace('/<'. $tags .'\b[^>]*>(.*?)<\/'. $tags .'>/is', "", $html);
    return $html;
}
0
Hoàng Vũ Tgtt

preg_replace()を使用したRafaSashiの回答に従って、単一のタグまたはタグの配列で機能するバージョンを次に示します。

/**
 * @param $str string
 * @param $tags string | array
 * @return string
 */

function strip_specific_tags ($str, $tags) {
  if (!is_array($tags)) { $tags = array($tags); }

  foreach ($tags as $tag) {
    $_str = preg_replace('/<\/' . $tag . '>/i', '', $str);
    if ($_str != $str) {
      $str = preg_replace('/<' . $tag . '[^>]*>/i', '', $_str);
    }
  }
  return $str;
}
0
Jonathan Land