簡體   English   中英

將img src轉換為href

[英]Transform img src to a href

我需要一些幫助才能在PHP中正常工作。

我在wordpress的不同“頁面”中有很多信息和圖片。 現在我真的無法弄清楚應該如何解決這個問題。

我直接在“頁面文字”中有很多這樣的圖片

<img src="..." />

我需要替換掉它

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

我認為有某種方法可以用一些我幾乎不了解的正則表達式來解決。

在此先感謝您,即使您不能解決問題,也可以為我指明正確的方向。 一個“頁面”中最多可以有4-5個圖像。

您可以為此使用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);
}

因此,正如我在您的評論中所說,您可以采取一些措施來解決此問題。 我將展示如何使用正則表達式 ,顯然,您必須對其進行改進以適合您的問題。 為了使用正則表達式,您必須確定要替換的模式,因為如果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=')([^']*)('\\/>)/"括號標識組(用於替換后者)第一個模式標識<img src=' ,第二部分標識([^']*)我的意思是:無論這不是一個單引號,第三部分我都從結束引號('\\/>)到結束標記img開始。

每個括號表示內部從左到右計數的組,因此:

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

在如下img標簽中: <img src='myImg3.jpg'/>

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

根據說明,此組的名稱為preg_replace命令的$npreg_replace

因此,我將自己替換為"<a href='$2'>$1$2$3</a>"

為了讓您學習和測試正則表達式,請使用本網站,我喜歡它,因為您可以粘貼文本並創建模式,然后實時查看情況。 如果您的模式匹配,它將以藍色背景顯示事件。

所以,讓我知道它是否對您有幫助。 非常抱歉,您的回復很晚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM