如何在字符串中给URL加一个“标签”

时间:2018-09-28 11:21:23

标签: php

我是日本的Web开发人员,英语不好,对不起。

$re_url = '/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/i';

$string = preg_replace($re_url, '<a href="$1" target="_blank">$1</a>', $string);

通过这种方式,您可以在字符串的url中添加“标签”。

但是当网址是这样时,

http://xxxxx.xxxxx.co.jp/xxxxx/xxxxx/xxxxx.x.xxxxx?id=12345

它不起作用。

我认为get参数(?id = 12345)使preg_replace感到困惑。

有解决这个问题的主意吗?


非常感谢您的回答。

我想要做的就是这样。

"Click here → http://xxxxx.xxxxx.co.jp/xxxxx/xxxxx/xxxxx.x.xxxxx?id=12345"

↓将此字符串更改为

"Click here → <a href='http://xxxxx.xxxxx.co.jp/xxxxx/xxxxx/xxxxx.x.xxxxx?id=12345'>http://xxxxx.xxxxx.co.jp/xxxxx/xxxxx/xxxxx.x.xxxxx?id=12345</a>"

这个。


对不起。 现在,我发现了为什么会这样。 我正确的代码是这样。

$re_mail = '/((?:\w+\.?)*\w+@(?:\w+\.)+\w+)/i';
$re_tel = '/([0-9]{6,9,10,11}|[0-9-]{12,13})/i';
$re_br = '/\n|\r|(\r\n)/';
$re_url = '/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/i';

$contents = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $contents);
$contents = preg_replace($re_mail, '<a href="mailto:$1">$1</a>', $contents);
$contents = preg_replace($re_tel, '<a href="tel:$1">$1</a>', $contents);
$contents = preg_replace($re_br, '<br/>', $contents);
$contents = preg_replace($re_url, '<a href="$1" target="_blank">$1</a>', $contents);

如果我擦除

$contents = preg_replace($re_mail, '<a href="mailto:$1">$1</a>', $contents);
$contents = preg_replace($re_tel, '<a href="tel:$1">$1</a>', $contents);
$contents = preg_replace($re_br, '<br/>', $contents);

这些,链接将正确生成,但是所有这些都是必需的。 我不想删除这些。

1 个答案:

答案 0 :(得分:1)

我真的不知道您要完成什么,但是您可以尝试将正则表达式与parse_url结合使用,并仅在您感兴趣的URL部分使用“标记”。

如果要用可单击的链接替换字符串中所有出现的URL,请参见this answer