-1

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

<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);

那就是建立链接的代码。

4

2 回答 2

0

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

于 2011-07-06T19:06:15.457 回答
0

假设您使用的是 PHP,并且 URL 存储在$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>';
}
于 2011-07-06T19:15:27.037 回答