为了账号安全,请及时绑定邮箱和手机立即绑定

php 在字符串中使用 is.gd api 缩短所有 url 并将它们链接起来

php 在字符串中使用 is.gd api 缩短所有 url 并将它们链接起来

PHP
慕神8447489 2023-04-21 16:51:40
正如标题所说,我正在尝试用字符串中的 is.gd api缩短所有url 并将它们链接起来。function link_isgd($text){    $regex = '@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-~]*(\?\S+)?)?)?)@';    preg_match_all($regex, $text, $matches);    foreach($matches[0] as $longurl)    {        $tiny = file_get_contents('http://isnot.gd/api.php?longurl='.$longurl.'&format=json');        $json = json_decode($tiny, true);        foreach($json as $key => $value)        {            if ($key == 'errorcode')            {                $link = $longurl;            }            else if ($key == 'shorturl')            {                $link = $value;            }        }    }    return preg_replace($regex, '<a href="'.$link.'" target="_blank">'.$link.'</a>', $text);}$txt = 'Some text with links https://www.abcdefg.com/123 blah blah blah https://nooodle.com';echo link_isgd($txt);这是我到目前为止所得到的,链接有效,如果字符串中只有 1 个 url,则缩短也是如此,但是如果有 2 个或更多,它们最终都会相同。注意:在帖子中不允许is.gd,所以我以为我发布了一个在这里不允许的短链接,所以我不得不将它更改为isnot.gd。
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

您的变量$link不是数组,因此它只需要最后分配的值$link. 您可以preg_replacestr_replace匹配项和链接替换并传递数组。

您也可以使用preg_replace_callback()并且可以将 $matches 直接传递给将替换为链接的函数。

function link_isgd($text)

{

    $regex = '@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-~]*(\?\S+)?)?)?)@';

    preg_match_all($regex, $text, $matches);


    $links = [];


    foreach ($matches[0] as $longurl) {

        $tiny = file_get_contents('http://isnot.gd/api.php?longurl=' . $longurl . '&format=json');

        $json = json_decode($tiny, true);


        foreach ($json as $key => $value) {

            if ($key == 'errorcode') {

                $links[] = $longurl;

            } else if ($key == 'shorturl') {

                $links[] = $value;

            }

        }

    }

    $links = array_map(function ($el) {

        return '<a href="' . $el . '" target="_blank">' . $el . '</a>';

    }, $links);


    return str_replace($matches[0], $links, $text);

}


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信