0

<br>PHPを使用して、特定の数のタグの前後に配置されているHTMLテキストを削除するにはどうすればよいですか?

たとえば、私はこれを持っています、

<div>
    <div><img sec=""></div>
    <br>
    <h3>title</h3>
    <span>some text here</span>
    <br>
    Some text that I want to remove.
    <br>
    <br>
</div>

<br>最後の2つのタグの前の文字列を削除したいと思います。またはそれは2番目の後に言うことができます<br>

最後の2つの配列要素をで試しexplode()<br>省略しましたarray_push()</div>ただし、外側のタグを閉じるために追加する必要がありました。外側のタグが動的に変化する場合、それは良い考えではありません。

誰かがこれに対する解決策を持っていますか?

4

4 に答える 4

1

Joshuaの回答に加えて、より簡単な方法でそれを実行したい場合は、以下のリンクにある単純なhtmldomライブラリを使用できます。彼らのドキュメントを読んでください。このライブラリは、現在のような問題が発生した場合や、Webコンテンツをスクレイピングしたい場合に何度も役立ちます。

http://simplehtmldom.sourceforge.net/

于 2012-08-24T04:11:16.523 に答える
0

実行したいのは、正規表現を使用した文字列照合で、2つのタグの前と前の<br>タグの後にテキストを取得すること<br>です。以下を参照してください。

http://www.regular-expressions.info/php.html

于 2012-08-24T04:04:06.100 に答える
0

さて、これは私が達成したことです。これは最も効率的な方法ではないかもしれませんが、私は共有します。ここで紹介したDOMinnerHTML()とpreg_split()を使用しました。<br>これにより、最後の3つのタグの後のテキストが削除されます。

<?php 
$html = <<<STR
<div>
    <div><img sec=""></div>
    <br>
    <h3>title</h3>
    <span>some text here</span>
    <br>
    Some text that I want to remove.
    <br>
    <br>
</div>
STR;

$doc = new DOMDocument;
$doc->loadHTML($html);
$node = $doc->getElementsByTagName('div')->item(0);
$innerHtml = DOMinnerHTML($node);
$arrHtml = preg_split('/<br.*?\/?>/i', $innerHtml);     // devide the string into arrays by <br> or <br />
array_splice($arrHtml, -3);     // remove the last three elements   
$edited = implode(" ", $arrHtml);

echo $edited;

function DOMinnerHTML($element) 
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
        $tmp_dom = new DOMDocument(); 
        $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
        $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 
?> 
于 2012-08-25T04:32:42.043 に答える
0

私は次のことをしました:

function limitTag($str,$tag,$limit) {
  $array = explode($tag,$str);
  $newStr = '';
  $i=0;
  foreach ($array as $child){
    if ($i<=$limite){
      if ($i>0) $newStr .= $tag;
      $newStr .= $child;
      $i++;
    } else break;
  }
  return $newStr;
}
于 2018-11-19T16:26:41.603 に答える