Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将img src转换为a href_Php_Regex_Image_Lightbox - Fatal编程技术网

Php 将img src转换为a href

Php 将img src转换为a href,php,regex,image,lightbox,Php,Regex,Image,Lightbox,我需要一些帮助,使这在PHP的工作 我在wordpress的不同“页面”中有很多信息和图片。现在我真的不知道该如何解决这个问题 我在“页面文本”中有很多这样的图片 我需要替换它,使它成为 <a href="content of img src" data-lightbox="image-1"><img src="..." /></a> 我想有办法用一些我几乎一无所知的regexp来解决这个问题 提前谢谢,即使你不能解决这个问题,你也许可以给我指出正确

我需要一些帮助,使这在PHP的工作

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

我在“页面文本”中有很多这样的图片


我需要替换它,使它成为

<a href="content of img src" data-lightbox="image-1"><img src="..." /></a>

我想有办法用一些我几乎一无所知的regexp来解决这个问题


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

您可以使用PHP文档来实现此目的。使用正则表达式也可以工作,但使用此方法将获得更好的成功

$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);
}

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

$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;
在img标记中,如下所示:

group 1 = <img src='
group 2 = myImg3.jpg
group 3 = '/>
第1组=
对于文档中所述的
preg\u replace
命令,这些组被命名为
$n

因此,我将替换为“”,这是不言自明的

为了学习和测试正则表达式,我喜欢使用它,因为你可以粘贴文本,创建模式,看看动态中会发生什么。如果您的模式匹配,它将显示蓝色背景的引用


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

因此图像包含_content()的内部内容;您可以插入一个javascript来轻松地完成这项工作。合适吗?但我需要知道这是什么:
img src的内容
应该成为我的内容();从一开始就包含。我想在前面添加一个data-lightbox1和href,使其与img src相同。嘿,非常感谢你这么做。我离开了几天,我会看看这个。非常感谢您的帮助!:)@user2957788很高兴为您提供帮助,希望它能帮助您:)
(<img src=') group 1
([^']*) group 2
('\/>) group 3
group 1 = <img src='
group 2 = myImg3.jpg
group 3 = '/>