-1

PHPを使用して、最初のブロックのテキストを2番目のブロックのテキストに変換することは可能ですか?もしそうなら、どのように?ありがとう

<div>
 <p>Some text & a <a href="http://abc.com/index.php?x=123&y=abc">link</a>. Done</p>
 <p>More text & a <a href="http://abc.com/index.php?x=123&y=abc">link</a>. Done</p>
</div>


<div>
 <p>Some text & a <strong>link</strong> <i>(http://abc.com/index.php?x=123&y=abc)</i>. Done</p>
 <p>More text & a <strong>link</strong> <i>(http://abc.com/index.php?x=123&y=abc)</i>. Done</p>
</div>

編集。アンディの推薦によると、次のようなものを見てください。リンクの変換にはまだ苦労していますが、良いスタートのようです。

libxml_use_internal_errors(true);   //Temporarily disable errors resulting from improperly formed HTML
$doc = new DOMDocument();
$doc->loadHTML($array['message_text']);
$a = $doc->getElementsByTagName('a');
foreach ($a as $link)
{
    //Where do I go from here?
}
$array['message_text'] = $doc->saveHTML();
libxml_use_internal_errors(false);
4

2 に答える 2

1

&まず、HTML エンティティとしてエンコードする必要があるため、HTML の形式が正しくありません&amp;。これを修正すると、次のようになります。

$html = '<div>
 <p>Some text &amp; a <a href="http://abc.com/index.php?x=123&amp;y=abc">link</a>. Done</p>
 <p>More text &amp; a <a href="http://abc.com/index.php?x=123&amp;y=abc">link</a>. Done</p>
</div>';

ここからは、正規表現を使用しないでください。これは信じられないほど脆く、HTML を解析するためのものではありません。代わりに、PHP のDOMDocumentクラスを使用して HTML を解析し、<a>タグを抽出し、それらから必要な情報を取得し、新しい HTML 要素を作成して、適切な場所に挿入することができます。

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

$xpath = new DOMXPath($doc);
foreach( $xpath->query( '//a') as $a) {
    $strong = $doc->createElement( 'strong', $a->textContent);
    $i = $doc->createElement( 'i', htmlentities( $a->getAttribute('href')));
    $a->parentNode->insertBefore( $strong, $a);
    $a->parentNode->insertBefore( $i, $a);
    $a->parentNode->removeChild( $a);
}

これは次を出力します

<p>Some text &amp; a <strong>link</strong><i>http://abc.com/index.php?x=123&amp;y=abc</i>. Done</p> 
<p>More text &amp; a <strong>link</strong><i>http://abc.com/index.php?x=123&amp;y=abc</i>. Done</p>
于 2012-11-29T18:07:54.210 に答える
-1

正規表現を使用する必要があります。

$newHtml = preg_replace(/<a[\s\w"'=\t\n]*href="(.*?)"[\s\w"'=\t\n]*>(.*?)<\/a>/i, "<strong>${2}</strong> <i>${1}</i>", $html);

ここで正規表現を見ることができます

于 2012-11-29T17:53:46.550 に答える