我是日本的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);
这些,链接将正确生成,但是所有这些都是必需的。 我不想删除这些。
答案 0 :(得分:1)
我真的不知道您要完成什么,但是您可以尝试将正则表达式与parse_url结合使用,并仅在您感兴趣的URL部分使用“标记”。
如果要用可单击的链接替换字符串中所有出现的URL,请参见this answer。