Değiştirin

Ben olmayan görüntülere bağlar dokunmadan (kullanıcı tarafından oluşturulan içerik içinde) görüntülere bağlantıları yerine / bulmak için bir yol arıyorum.

Örneğin, aşağıdaki metni:

<a href="http://domain.com/arbitrary-file.jpg">Text</a>
<a href="http://domain.com/arbitrary-file.jpeg">Text</a>
<a href="http://domain.com/arbitrary-path/arbitrary-file.gif">Text</a>
<a href="http://domain.com/arbitrary-file.png">Text</a>

<a href="http://domain.com/arbitrary-file.html">Text</a>
<a href="http://domain.com/arbitrary-path/">Text</a>
<a href="http://domain.com/arbitrary-file#anchor_to_here">Text</a>

Non-hyperlinked URL: http://domain.com/arbitrary-path/arbitrary-file.gif
Non-hyperlinked URL: http://domain.com/arbitrary-file#anchor_to_here

... Revize edilmelidir için:

<img src="http://domain.com/image.jpg" alt="Text" />
<img src="http://domain.com/arbitrary-file.jpeg" alt="Text" />
<img src="http://domain.com/arbitrary-path/arbitrary-file.gif" alt="Text" />
<img src="http://domain.com/arbitrary-file.png" alt="Text" />

<a href="http://domain.com/arbitrary-file.html">Text</a>
<a href="http://domain.com/arbitrary-path/">Text</a>
<a href="http://domain.com/arbitrary-file.html#anchor_to_here">Text</a>

Non-hyperlinked URL: http://domain.com/arbitrary-path/arbitrary-file.gif
Non-hyperlinked URL: http://domain.com/arbitrary-file#anchor_to_here

... Güvenli ve güvenilir PHP.

2 Cevap

Orada bunu yapmak için hiçbir reliable yolu değil, en azından düzenli ifadeler ile, ama bu yine de hile yapmak gerekir:

$str = preg_replace('~<a[^>]*?href="(.*?(gif|jpeg|jpg|png))".*?</a>~', '<img src="$1" />', $str);

Biraz Bu kadar açmak için:

  • <a etiketleri açılış bul
  • Bu etiketin içinde href niteliğini bul
  • Bu listelenen dosya uzantıları biri ve bir " karakteri ile biter eğer href alın
  • Yerine de kapanma </a> etiketi kadar bağlantı kalanını dahil
  • Bir src niteliği olarak href alır img elemanı ile bütün maçı değiştirin

Bauer belirtildiği gibi, DOM yöntemlerini kullanarak daha iyi olabilir. Eğer bağlantıları bu biçimde her zaman emin olabilirsiniz Ama eğer normal ifadeler kullanabilirsiniz. Regex de biraz daha hızlı olabilir.

Bu tür PHP Simple HTML DOM Parser olarak (size teslim etiketli olarak yerine düzenli ifadeler) bir HTML çözümleyici kullanarak bakmak isteyebilirsiniz. Bu söz güvenilirliği ile size sağlayacaktır.

Muhtemelen böyle bir şey ile bitireceğiz:

foreach($html->find('a') as $element)
{
    echo '<img src="'.$element->href.'" alt="'.$element->innertext.'" />';
}