2011-09-15 5 views
-1

私はテキストエディタからHTML文字列を読み込んでおり、要素をDBに保存する前にいくつかの要素を操作する必要があります。PHP文字列からHTMLを操作する

私は何を持っていることは、このようなものです:

<h3>Some Text<img src="somelink.jpg" /></h3> 

または

<h3><img src="somelink.jpg" />Some Text</h3> 

と、私はこれは次の形式

<h3>Some Text</h3><div class="img_wrapper"><img src="somelink.jpg" /></div> 

にそれを配置する必要があります私が思いついた解決策。

$html = '<html><body>' . $field["data"][0] . '</body></html>'; 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$domNodeList = $dom->getElementsByTagName("img"); 

// Remove Img tags from H3 and place it before the H# tag 
foreach ($domNodeList as $domNode) { 
    if ($domNode->parentNode->nodeName == "h3") { 
     $parentNode = $domNode->parentNode; 
     $parentParentNode = $parentNode->parentNode; 

     $parentParentNode->insertBefore($domNode, $parentNode->nextSibling); 
    } 
} 

echo $dom->saveHtml(); 
+3

http://php.net/manual/en/book.dom.php – pleasedontbelong

答えて

0

を探している可能性がありますが、良い対策のために、ここでは答えのセクションに再びです。

$html = '<html><body>' . $field["data"][0] . '</body></html>'; 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$domNodeList = $dom->getElementsByTagName("img"); 

// Remove Img tags from H3 and place it before the H# tag 
foreach ($domNodeList as $domNode) { 
    if ($domNode->parentNode->nodeName == "h3") { 
     $parentNode = $domNode->parentNode; 
     $parentParentNode = $parentNode->parentNode; 

     $parentParentNode->insertBefore($domNode, $parentNode->nextSibling); 
    } 
} 

echo $dom->saveHtml(); 
1

あなたは、私が答えと質問を更新にpreg_replace

// take a search pattern, wrap the image tag matching parts in a tag 
// and put the start and ending parts before the wrapped image tag. 
// note: this will not match tags that contain > characters within them, 
//  and will only handle a single image tag 
$output = preg_replace(
    '|(<h3>[^<]*)(<img [^>]+>)([^<]*</h3>)|', 
    '$1$3<div class="img_wrapper">$2</div>', 
    $input 
); 
+0

注2 [あなたが必要とするすべては愛がある]:これは、ここでDOMを使用することをお勧めし、見出しの外に画像を移動することはありません – feeela

+0

おっと、質問のその部分を逃した。ありがとうございました。 – rrehbein