Php 如何添加rel=";灯箱“;仅指向包含图像的链接,而不指向其余链接?

Php 如何添加rel=";灯箱“;仅指向包含图像的链接,而不指向其余链接?,php,html,regex,image,tags,Php,Html,Regex,Image,Tags,假设(在php中)有一个变量,它包含文本、链接和图像: <a href="myimage_big"><img src="myimage.jpg" alt="pic" title="pic" border="0" /></a> 我们希望在每个a href标签中添加rel=“light”,如下所示: <a rel="lightbox" href="myimage_big"><img src="myimage.jpg" alt="pic" t

假设(在php中)有一个变量,它包含文本、链接和图像:

<a href="myimage_big"><img src="myimage.jpg" alt="pic" title="pic" border="0" /></a>

我们希望在每个a href标签中添加rel=“light”,如下所示:

<a rel="lightbox" href="myimage_big"><img src="myimage.jpg" alt="pic" title="pic" border="0" /></a>

如果变量的名称是let say$mydata,那么使用str_replace,我们可以执行以下操作来解决问题:

$mydata = str_replace('<img ', '<img rel="lightbox"', $mydata);

$mydata=str_replace(“这个正则表达式解决问题了吗?”

$str = '<a href="myimage_big"><img src="myimage.jpg" /></a>';

$str = preg_replace('~<a(?=[^>]+>\s*<img)~','<a rel="lightbox"',$str);

echo htmlspecialchars($str);
$str='';

$str=preg_replace('~检查
后面是否跟有
这个正则表达式是否解决了问题

$str = '<a href="myimage_big"><img src="myimage.jpg" /></a>';

$str = preg_replace('~<a(?=[^>]+>\s*<img)~','<a rel="lightbox"',$str);

echo htmlspecialchars($str);
$str='';

$str=preg_replace('~检查
后面是否跟有
如果您喜欢使用正则表达式

$html = preg_replace('/(?<=<a)(?=[^>]*>[^<]*<img)/', ' rel="lightbox"', $html);
$html=preg_replace('/(?query('//a//img');
foreach($links作为$link){
$link->parentNode->setAttribute('rel','lightbox');
}
echo$doc->saveHTML();

如果您喜欢使用正则表达式

$html = preg_replace('/(?<=<a)(?=[^>]*>[^<]*<img)/', ' rel="lightbox"', $html);
$html=preg_replace('/(?query('//a//img');
foreach($links作为$link){
$link->parentNode->setAttribute('rel','lightbox');
}
echo$doc->saveHTML();


一点也不确定你在问什么-你能让你的例子更清楚吗?所有的东西都在一个大字符串中,还是每个链接都有一个不同的字符串?您好,使用str_replace,就像我在添加到每个:a rel=“lighbox”标记之前显示的那样,但问题是rel=“lightbox”应用于不包含任何图像的链接,如,我不想,如何解决此问题?Barmar所有文本、链接和图像都包含在一个名为$MyData的变量中。我想你已经问了相同的问题。你对收到的两个答案不满意吗?根本不确定你在问什么-你能确定你的答案吗示例更清晰?是所有内容都在一个大字符串中,还是每个链接都有一个不同的字符串?您好,使用str_replace,正如我在添加到每个:a rel=“lighbox”标记之前所显示的那样,但问题是a rel=“lightbox”应用于不包含任何图像的链接,如,我不想,如何解决此问题?Barmar所有文本、链接和图像都包含在一个名为$MyData的变量中。我想你已经问了相同的问题。你对收到的两个答案不满意吗?是的,这刚刚解决了我的问题,非常感谢!太好了,y欢迎!圣诞快乐:-)圣诞快乐,新年快乐,乔尼5!祝大家平安、健康、爱情、幸福、自由和好运:)是的,这刚刚解决了我的问题,非常感谢!太好了,欢迎!圣诞快乐:-)圣诞快乐,新年快乐,乔尼5!祝大家平安、健康、爱情、幸福、自由和好运:)谢谢,但我必须阅读更多有关此方法和DOM的信息,我将:)但请告诉我,为什么在这种情况下,你建议我远离正则表达式?因为你不应该使用正则表达式来尝试解析任何类型的HTML、XML……标记。它有时比你想象的更复杂。是的,也许我对正则表达式的了解仍然很差,但在这种情况下,Jonny 5最终给出的解决方案是sim不可以吗?我以为你告诉我出于安全原因不要使用正则表达式,但无论如何还是要感谢Hanks,但我必须阅读更多有关此方法和DOM的信息,我会:)但请告诉我,为什么在这种情况下,你建议我远离正则表达式?因为你不应该使用正则表达式来尝试解析任何类型的HTML、XML……标记。它有时比你想象的更复杂。是的,也许我对正则表达式的了解仍然很差,但在这种情况下,Jonny 5最终给出的解决方案是sim不是吗?我以为你告诉我出于安全原因不要使用正则表达式,但无论如何,再次感谢你
$doc = DOMDocument::loadHTML('
     <a href="myimage_big"><img src="myimage.jpg" alt="pic" title="pic" border="0" /></a>
     <a href="link1.php">link_no1</a>
     <a href="link2.php">link_no2</a>
     <a href="image.jpg"><img src="image1.jpg"></a>
');

$xpath = new DOMXPath($doc);
$links = $xpath->query('//a//img');

foreach($links as $link) { 
   $link->parentNode->setAttribute('rel', 'lightbox');
}

echo $doc->saveHTML();