次の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>
が終了するまで、すべて削除したいと思います。それ、どうやったら出来るの?
$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();
次のようにpreg_replace()
を使用できます。
$string = preg_replace('/<div id="someid"[^>]+\>/i', "", $string);
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;
}
_
リソース
Simple HTML DOM を使用することもできます。
PHP5 +で記述されたHTML DOMパーサーを使用すると、HTMLを非常に簡単に操作できます。
特定のタグと属性を取り除くためにこれらを書きました。それらは正規表現であるため、すべてのケースで動作することが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;
}
drpckenによる発言
あなたが持っていると仮定します
$ title = "投稿の管理";
次に、それをstrip_tags($ title、 'title');として使用できます。
投稿を管理するだけです
strip_tags()関数はあなたが探しているものです。
これはどう?
// 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;
}
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;
}