链接或图像preg / ereg替换?

时间:2011-07-06 18:56:04

标签: php image hyperlink preg-replace ereg

继承我的问题。我正在建立一个网站,您可以在其中分享链接/图片。现在是我想要做的事情。如果链接是指向站点的链接,则显示如下链接:

<a href="http://example.com" target="_blank">http://example.com</a>

但继承我的垮台,如果它是一张图片(jpg,gif,png等)我想在页面而不是链接上显示它。我该怎么做呢?

- 忘了添加:

$profile_post_post = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" target=\"_blank\">\\0</a>", $profile_post_post);

这就是构成链接的代码。

2 个答案:

答案 0 :(得分:0)

使用preg_replace_callback,提供一个回调,根据其格式有条件地选择链接内容。即如果它以.jpg结尾,则呈现img标记。如果它以典型图像文件扩展名以外的任何内容结束,请打印其名称。

答案 1 :(得分:0)

假设您使用的是PHP,并且该网址存储在 $ url 中:

if (!preg_match("@^https?\:\/\/@", $url)
{
    $url = "http://$url";
}

if (preg_match("@\.(gif|jpe?g|png)$@", $url))
{
   echo '<img src="' . $url . '" />"';
}
else
{
   echo '<a href="' . $url . '" target="_blank">' . $url . </a>;
}

这不是一个确切的方法,因为某些图片可能使用正确的MIME类型提供,而不带有gif,jpeg,jpg或png扩展名。

这是检查链接是否引用图片的更好方法,但它耗费时间和带宽。因此,最好将结果存储在数据库中,同时$ url是,以便以后重用:

if (!preg_match("@^https?\:\/\/@", $url)
{
    $url = "http://$url";
}

$headers = get_headers($url, 1);
$mime_type = isset($headers["Content-Type"])  ?  $headers["Content-Type"]  :  "";

if (preg_match("@\.(gif|jpe?g|png)$@", $url)  ||  preg_match("@^image\/@", $mime_type))
{
   $html = '<img src="' . $url . '" />"';
}
else
{
   $html = '<a href="' . $url . '" target="_blank">' . $url . '</a>';
}