首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将img src转换为href

将img src转换为href
EN

Stack Overflow用户
提问于 2013-11-06 03:48:38
回答 2查看 255关注 0票数 1

我需要一些帮助,让这在PHP中工作。

我在wordpress的不同“页面”中有很多信息和图片。现在我真的想不出该如何解决这个问题了。

我有很多这样的图像直接在“页面文本”

代码语言:javascript
复制
<img src="..." />

我需要把它替换掉这样它就变成了

代码语言:javascript
复制
<a href="content of img src" data-lightbox="image-1"><img src="..." /></a>

提前感谢,即使你不能解决这个问题,也许你可以给我指明正确的方向。一个“页面”最多可以有4-5张图片。

EN

回答 2

Stack Overflow用户

发布于 2013-11-06 06:33:36

您可以使用PHP DOMDocument来实现这一点。使用正则表达式也可以,但使用此方法会获得更好的成功。

代码语言:javascript
复制
$dom = new DOMDocument();
$dom->loadHTML($html); // $html is your "page text"

//Create new wrapper
$new_anchor = $dom->createElement('a');
$new_anchor->setAttribute('data-lightbox','image-1');

//Find all images
$images = $dom->getElementsByTagName('img');

//Iterate though images
foreach ($images AS $image) {
    //Clone our created anchor
    $new_anchor_clone = $new_anchor->cloneNode();
    //Add on the src
    $new_anchor_clone->setAttribute('href',$image->getAttribute('src'));
    //Replace image with this anchor
    $image->parentNode->replaceChild($new_anchor_clone,$image);
    //Append this image to wrapper anchor
    $new_anchor_clone->appendChild($image);
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-06 22:06:30

所以,正如我在你的评论中所说的,你可以做一些事情来解决这个问题。我将向您展示如何使用正则表达式,显然您必须对其进行改进以适应您的问题。为了使用正则表达式,你必须确定你想要替换的模式,因为如果任何一个img标签与你的模式不匹配,这个不会被替换。所以我举了个小例子:

代码语言:javascript
复制
$content = "
<html>
  <body>
    <img src='myImg.jpg'/><br/>
    <img src='myImg2.jpg'/><br/>
    <img src='myImg3.jpg'/><br/>
    <img src='myImg4.jpg'/><br/>
    <img src='myImg5.jpg'/><br/>
    <img src='myImg6.jpg'/><br/>
  </body>
</html>
";

$newContent = preg_replace( "/(<img src=')([^']*)('\/>)/", "<a href='$2'>$1$2$3</a>", $content);
echo $newContent;

正如您在我的$content变量中看到的,img标记遵循相同的模式,这使得创建R.E.

parentesis "/(<img src=')([^']*)('\/>)/" groups (用于替换后一组)第一个模式标识<img src=',第二部分([^']*)我想说的是:所有不是单引号的东西和第三部分我从结束引号('\/>)开始到结束标记img。

每个parentesis意味着一组内部接收从左到右计数的数字,所以:

代码语言:javascript
复制
(<img src=') group 1
([^']*) group 2
('\/>) group 3

在img标记中,如下所示:<img src='myImg3.jpg'/>

代码语言:javascript
复制
group 1 = <img src='
group 2 = myImg3.jpg
group 3 = '/>

这些组被命名为preg_replace命令的$n,如文档所述:preg_replace

因此我将其替换为"<a href='$2'>$1$2$3</a>",这是不言而喻的。

为了学习和测试您的正则表达式,请使用这个Site,我喜欢它,因为您可以粘贴文本和创建模式,并随时查看发生了什么。如果您的模式匹配,它将以蓝色背景显示实例。

所以,如果它对你有帮助,请告诉我。很抱歉这么晚才回复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19797587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档