PHP - 查找并转换所有链接和图像,以HTML格式显示它们

时间:2016-05-02 06:51:51

标签: php html regex function

我已经看过很多与此相关的主题,但无法找到适用于链接和图片的内容。

在我的PHP页面上,我回显$ content,其中包含来自我的数据库的记录。在此字符串中,可以有网址和图片网址。我需要的是一个自动查找这些URL并以适当的HTML显示它们的函数。因此,普通链接应显示为<a ...>....</a>,图像链接(以jpeg,jpg,png,gif,...结尾)应显示为<img ...>

这是我在网址链接中找到的唯一内容:

$content = preg_replace("~[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]~",
                        "<a href=\"\\0\">\\0</a>", 
                        $content);

echo $content; 

我想我应该使用一些正则表达式代码,但我对此并不十分熟悉。谢谢你们!

修改

http://example.comhttps://example.com应该都显示为<a href="url">url</a>。所有不是图片的网址;

http://www.example.com/image.png应显示为<img src="http://www.example.com/image.png"> 这适用于所有以png,jpeg,gif等图像扩展名结尾的网址

1 个答案:

答案 0 :(得分:1)

将您的项目(图片和链接)转换为一种方法,首先应用更具体的模式,然后在src='中使用其他方面的负面反馈:

<?php
$content = "I am an image (http://example.com/image.png) and here's another one: https://www.google.com/image1.gif. I want to be transformed to a proper link: http://www.google.com";

$regex_images = '~https?://\S+?(?:png|gif|jpe?g)~';
$regex_links = '~
                (?<!src=\') # negative lookbehind (no src=\' allowed!)
                https?://   # http:// or https://
                \S+         # anything not a whitespace
                \b          # a word boundary
                ~x';        # verbose modifier for these explanations

$content = preg_replace($regex_images, "<img src='\\0'>", $content);
$content = preg_replace($regex_links, "<a href='\\0'>\\0</a>", $content);
echo $content;
# I am an image (<img src='http://example.com/image.png'>) and here's another one: <img src='https://www.google.com/image1.gif'>. I want to be transformed to a proper link: <a href='http://www.google.com'>http://www.google.com</a>
?>

查看 ideone.com

上的演示