2016-05-31 13 views
0

Ich möchte ein target="blank" -attribute zu allen Links hinzufügen, die eine PDF-Datei enthalten, wie href. Um dies zu erreichen, möchte ich eine preg_replace auf $content einschließlich der gesamten HTML mit mehreren PDF-Links in ihm tun. Ich denke, so etwas wie dies funktionieren würde, aber leider hat es nicht: Add target = "_ blank" zu allen PDF-Links

preg_replace('/((<a (?=.*\.pdf)(?!.*target="_blank").*?)>)/', '$2 target="_blank">', $content); 

sollte folgendes So zum Beispiel geschehen:

$content = '<html> 
<a href="http://www.example.com/file.pdf" title="File"> 
<a href="/file2.pdf" title="File2"> 
<a href="http://www.example.com/image.jpg" title="Image"> 
</html>'; 

preg_replace('/((<a (?=.*\.pdf)(?!.*target="_blank").*?)>)/', '$2 target="_blank">', $content); 
    echo $content; 

Sollte Ausgabe:

<html> 
<a href="http://www.example.com/file.pdf" title="File" target="_blank"> 
<a href="/file2.pdf" title="File2" target="_blank"> 
<a href="http://www.example.com/image.jpg" title="Image"> 
</html> 

Können Sie helfen Ich finde den richtigen RegEx dafür?

Wenn es eine einfachere Möglichkeit gibt, dasselbe zu erreichen, würde ich es gerne hören.

Vielen Dank!

+1

Wenn Sie eine Frage fragen, füge ein Beispiel für die Eingabe und erwartete Ausgabe gegenüber der tatsächlichen Ausgabe. Das würde es dir leichter machen, dir zu helfen! – alfasin

Antwort

1

Ein besserer und weniger fehleranfälliger Weg ist die Verwendung von DOMDocument und DOMXPath. Um ein target Attribut für alle Anker, von denen hinzufügen, die href mit .pdf endet, können Sie tun:

<?php 
$content = '<html> 
<a href="http://www.example.com/file.pdf" title="File"> 
<a href="/file2.pdf" title="File2"> 
<a href="http://www.example.com/image.jpg" title="Image"> 
</html>'; 

$doc = new DOMDocument(); 
$doc->loadHTML($content); 
$xpath = new DOMXPath($doc); 
/** @var DOMNodeList $anchors */ 
$anchors = $xpath->query('//a[substring(@href, string-length(@href) - 3) = ".pdf"][not(@target = "_blank")]'); 

/** @var DOMElement $anchor */ 
foreach($anchors as $anchor) { 
    $anchor->setAttribute('target', '_blank'); 
} 

echo $doc->saveHTML(); 
+0

Funktioniert wie ein Charme, vielen Dank! Ich kannte die 'DOMDocument()' -Klasse noch nicht. – BasC

Verwandte Themen