1

我需要一些帮助才能让它在 PHP 中工作。

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

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

<img src="..." />

我需要替换它,所以它变成

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

我认为有一些方法可以用一些我几乎一无所知的正则表达式来解决这个问题。

在此先感谢您,即使您无法解决问题,您也可以为我指明正确的方向。“页面”中最多可以有 4-5 张图像。

4

2 回答 2

0

因此,正如我在您的评论中所说,您可以采取一些措施来解决这个问题。我将展示如何使用正则表达式,显然你必须改进它以适应你的问题。为了使用正则表达式,您必须确定要替换的模式,因为如果任何一个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;

正如您在我$content的变量中看到的,img标签遵循相同的模式,这使得创建 RE 变得更容易

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

每个 parentesis 表示一个内部接收从左到右计数的数字的组,因此:

(<img src=') group 1
([^']*) group 2
('\/>) group 3

在这样的 img 标签中:<img src='myImg3.jpg'/>它将是:

group 1 = <img src='
group 2 = myImg3.jpg
group 3 = '/>

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

所以我然后替换"<a href='$2'>$1$2$3</a>"它是不言自明的。

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

所以,让我知道它是否对你有帮助。很抱歉回复晚了。

于 2013-11-06T14:06:30.023 回答
0

您可以为此使用 PHP DOMDocument。使用正则表达式也可以,但使用此方法会取得更好的成功。

$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);
}
于 2013-11-05T22:33:35.843 回答