wordpress 関数を作成しており、コンテンツ内の画像が PDF または DOC ファイルへのリンクを含むタグでラップされているかどうかを判断する必要があります。
<a href="www.site.com/document.pdf"><img src="../images/image.jpg" /></a>
PHPでこれを行うにはどうすればよいですか?
ありがとう
wordpress 関数を作成しており、コンテンツ内の画像が PDF または DOC ファイルへのリンクを含むタグでラップされているかどうかを判断する必要があります。
<a href="www.site.com/document.pdf"><img src="../images/image.jpg" /></a>
PHPでこれを行うにはどうすればよいですか?
ありがとう
これには正規表現を使用しないことを強くお勧めします。エラーが発生しやすく読みにくいだけでなく、コンテンツを簡単に操作することもできません。
コンテンツを DomDocument にロードし、すべての<img>
要素を取得して、親が要素であるかどうかを検証する方がよいでしょう<a>
。href
あとは、属性の値が目的の拡張子で終わっているかどうかを検証するだけです。
非常に大雑把な実装は、次のようになります。
<?php
$sHtml = <<<HTML
<html>
<body>
<img src="../images/image.jpg" />
<a href="www.site.com/document.pdf"><img src="../images/image.jpg" /></a>
<a href="www.site.com/document.txt"><img src="../images/image.jpg" /></a>
<p>this is some text <a href="site.com/doc.pdf"> more text</p>
</body>
</html>
HTML;
$oDoc = new DOMDocument();
$oDoc->loadHTML($sHtml);
$oNodeList = $oDoc->getElementsByTagName('img');
foreach($oNodeList as $t_oNode)
{
if($t_oNode->parentNode->nodeName === 'a')
{
$sLinkValue = $t_oNode->parentNode->getAttribute('href');
$sExtension = substr($sLinkValue, strrpos($sLinkValue, '.'));
echo '<li>I am wrapped in an anchor tag '
. 'and I link to a ' . $sExtension . ' file '
;
}
}
?>
正確な実装は、読者の演習として残しておきます ;-)