<?php
// The Regular Expression filter
$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
// The Text you want to filter for urls
$text = "The text you want to filter goes here. http://google.com";
// Check if there is a url in the text
if(preg_match($reg_exUrl, $text, $url)) {
// make the urls hyper links
echo preg_replace($reg_exUrl, "<a href="{$url[0]}">{$url[0]}</a> ", $text);
} else {
// if no urls in the text just return the text
echo $text;
}
?>
此函数的基本功能是在文本块中查找任何 URL 并将其转换为超链接。它仅在 URL 格式正确时才会查找 URL,这意味着它们必须具有 http、https、ftp 或 ftps。
查看下面的评论以获取更多解决方案。
我想从我内心深处感谢你,过去 6 个月我一直都在寻找这个确切的脚本!谢谢,谢谢,谢谢。不过我想指出,出现了一个错误,但没什么我无法解决的:D 根据你的代码,这是我为自己找到可用的代码。
再次非常感谢!
太棒了!!!ela
非常感谢你修复了代码
再次感谢。代码运行良好。
大家好,在文本中查找 URL 并将其转换为链接,这个功能很棒。我有一个疑问。假设我有一些文本包含普通 URL 和带有 src(“https://www.something.com/images/test/jpeg”)的图像标签。因此,我需要跳过 img 标签,只保留超链接 URL。这怎么可能实现?
谢谢各位
我怎样才能过滤替换字符串以避免文本中的图像文件链接?
一些带链接的文本 https://hola.com 以及图像
我只想替换网页链接,而不是替换图像链接。
它无法在文本中处理两个 URL。
这对于 2 个或更多 URL 不起作用。
尝试使用循环 => 通过 MySQL 获取数据时解决了我的问题
在正则表达式的末尾添加“g”以捕获所有实例。
使用 preg_match() 语法或类似的方法查找图像 URL,以从混合文本中提取 JPG 或 PNG 或 GIF URL 并将其存储到数组中,或最终存储第一个 URL。
也许有一些语法可以搜索以 http 开头并以 jpg/png/gif 结尾的字符串。
我相信可以使用 preg_match() 实现。
注意:文本可能如下所示:$string =blablablabla“http://www.xxx.com/xxx.jpg”blablablabla
$matches = array();
preg_match_all(‘!http://.+\.(?:jpe?g|png|gif)!Ui’ , $string , $matches);
谢谢,
它运行得非常完美!
这可能是大多数人正在寻找的内容。感谢你主动改进它。
这是我基于先前示例的版本……希望这对正在尝试在没有 http 的情况下强制 www 链接的人有所帮助……
只需按如下方式调用函数
$body = txt2link($body);
当在循环中使用上述代码时(其中创建包含文本/链接的项目符号列表),如果有多个列表项包含需要转换的 URL,则会出现服务器错误。有没有办法在 foreach 中执行此操作?
谢谢!
此方法无法捕获的情况
https://127.0.0.1/test
http://1.2.3.4/test
此外,如果你输入
“http://www.google.co.uk/page 在网站 http://www.google.co.uk/ 上”
你将得到一些非常混乱的输出,因为当你搜索“http://www.google.co.uk/”时,你也会匹配现有链接“http://www.google.co.uk/page”中间的文本。
你的网站很棒。没有废话。都是好东西。请将我的电子邮件 ID 包含在你的永久邮件列表中。
可以修改查找 URL 的原始脚本以查找以 .mp3 扩展名结尾的链接吗?
谢谢,运行得非常完美!
很棒的文章。正是我正在寻找的。我将在我的网站上使用它。
谢谢。
另一个产生更好结果的等效函数:http://code.seebz.net/p/autolink-php/
JavaScript 中也有相同的函数:http://code.seebz.net/p/autolink-js/
太棒了!感谢你分享这个好东西
域名可以超过 3 个字符,例如 http://cxid.info/
开发正则表达式的绝佳技巧。
我稍微修改了一下,因为它无法处理多个 URL。除此之外,非常感谢你的帮助。
我真的很喜欢这个正则表达式:D
是否有此功能的演示?我一直在尝试在 div 上的一个类中放入一个 URL,它将使 div 中的文本成为链接,而无需在 HTML 标记中使用 。这在非侵入式 CSS 中是否过分了?
大家好
这种方法简单得多。该成本将 $Text 中的 URL 转换为 HTML 超链接
if (preg_match(“/http/”, “$Text”) OR preg_match(“/www/”, “$Text”))
{
$ExplodeText = explode(” “, $Text);
foreach($ExplodeText as $Check)
{if (preg_match(“/http/”, “$Check”) OR preg_match(“/www/”, “$Check”)) {$Text = str_replace($Check , “$Check” , $Text);}}
}
抱歉,我在上面发布的代码中出现了一个错误。以下是更正后的版本
if (preg_match(“/http/”, “$Text”) OR preg_match(“/www/”, “$Text”))
{
$Text = str_replace(” www” , ” http://www” , $Text);
$Explode = explode(” “, $Text);
foreach($Explode as $Check) {if (preg_match(“/http/”, “$Check”) OR preg_match(“/www/”, “$Check”)) {$Text = str_replace($Check , “$Check” , $Text);}}
}
请将我的电子邮件 ID 添加到你的邮件列表中,我想收到这里讨论的所有内容的通知,谢谢!
很棒的正则表达式,谢谢!这是一个不需要循环并且可以捕获 http:// 或 www 的单个 preg_replace。
$text = “查看我的链接 http://mylink.com 或者 http://www.otherlink.com 也适用”;
$reg_exUrl = “/((((http|https|ftp|ftps)\:\/\/)|www\.)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}(\/\S*)?)/”;
echo preg_replace( $reg_exUrl, “<a href=\"$1\">$1</a> “, $text );
补充说明:实际上,它将 www. 链接视为本地链接,因此需要进一步处理。
你好,如果网址包含“%20”,我该如何处理它呢?
例如:http://www.lalala.com/%20text%20some.html
你能帮我解决一下吗?
谢谢
此致
提前替换 %20。
感谢这个教程。我很开心。它有效……:)
能否有人发布或邮件发送给我最终的完整脚本,该脚本可以查找页面中的所有网址并将其突出显示为链接?
我请求这样做是因为我自己不懂编码,因为我不从事网页设计。
这是一篇很棒的文章,但它无法处理某些情况,所以我对其进行了少量修改,请查看下面的文章,它可以很好地处理所有可能的情况……
http://www.javaquery.com/2012/06/turn-urls-into-links-in-text-with.html
实际上,一切都简单多了)
*
比在这个网站上发布带有代码的评论简单多了XD
****,好吧,锚标记中应该有“href=”\”>\”
啊啊啊啊啊啊啊啊啊啊 这是解决方案的链接
是的。它简单多了……哈哈
感谢你的坚持。你的代码有效……
我有一个聊天记录,我想从中提取所有链接。如何使用此代码来完成此操作?
*我不是程序员*
我可以运行某种批处理命令文件或其他东西并指向文本日志吗?
echo preg_replace($reg_exUrl, “{$url[0]} “, $text);
在以上代码中
“{$url[0]}” => ‘{$url[0]}’
修复了我的问题
我在这行代码上一直遇到错误
echo preg_replace($reg_exUrl, “{$url[0]} “, $text);
我认为它必须来自“{$url[0]}”和{$url[0]}
谁能帮我看看发生了什么事
是的,你应该将其更改为
echo preg_replace($reg_exUrl, “.$url[0].“, $text);
我对此进行了一些更改,使其可以处理多个链接
这对我有用,但在没有 http:// 或 https:// 的情况下不起作用,我该如何添加使其能够与 www 一起使用?
大家好,访问这个网站对我来说真是太好了,它包含有用的信息。
是的!!另一个非常有用的代码片段!!另一个css ticks的书签;)
它也存在语法错误。以下是正确的代码
//简单——>对我有用
$data =”我的文本 https://127.0.0.1/c.hodari90“;
$data = preg_replace( ‘/(http|ftp)+(s)?:(\/\/)((\w|.)+)(\/)?(\S+)?/i’, ‘\4‘, $data );
echo $data;
输出 = 我的文本 facebook.com/c.hodari90
建议的代码存在轻微缺陷。如果 $text 包含两个相似的网址,例如“要过滤的文本有两个网址,分别是 http://google.com,但也包含 http://google.com/index.html#hashtag”,这两个网址的开头相同,则第二个网址中的 #hashtag 会丢失。
由于字符串中的网址以空格分隔(我相信总是如此),因此以下代码对我有用
顺便说一句,我使用了不同的正则表达式,它不匹配包含@等禁止字符的网址。
最后……让这条评论以正确的方式显示真是太麻烦了(我希望……)。
你的代码有效,但你忘记关闭 标记了!
我更改了
$replacement = ““.$match.””;
为
$replacement = ““.$match.”“;
你的代码如果存在网址则不打印文本,因此更改了此内容
// 如果文本中存在网址,则返回删除前导和尾随空格后的文本
// 删除前导和尾随空格
$text = trim(nl2br($text), ” “);
为
// 如果文本中存在网址,则返回删除前导和尾随空格后的文本
// 删除前导和尾随空格
$text = trim(nl2br($text), ” “);
echo $text;
希望这对某些人有所帮助! :)
尝试这个用于多个网址
function findURLs($text)
{
在偶然发现此代码片段之前,我自己编写了这段代码——我需要解析存储在我网站数据库中的推文中的链接。
唯一的区别在于我的版本解析多个链接。
搜索任何人如何获取 curl php 中的第一个链接网址
请帮我一下
这对我来说效果很好,可以格式化发布的评论以供发布
用于从网址中查找电子邮件的模式是什么?
我尝试了这个
$reg_exUrl = ‘/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/’;
不起作用,请帮忙
我正在寻找一个宽松的解决方案,允许使用多种网址格式,无论是否有“http”或“https”。此页面上的任何一个对我都不起作用,但我从 stackoverflow 上的 markd 那里找到一个很棒的脚本(http://stackoverflow.com/questions/1959062/how-to-add-anchor-tag-to-a-url-from-text-input)
它适用于这些网址(并成功地忽略了尾随句点或逗号)
谢谢兄弟,它有效。
这条线到底是什么?
$replacement = ““.$match.”
我认为它不起作用。
感谢这篇文章和评论。通过它,我能够极大地改进我以前的代码:)。使用这篇文章的原文,有一些空白需要解决
1- 如评论中所述,文本中不能有多个网址。这可以通过轻松地将 preg_replace() 中的“$url[0]”替换为“$1”来解决
2- 脚本不关心原始文本中的 http:// 链接是否已包含在 html 链接中。为了解决这个问题,您必须修改正则表达式的开头以仅匹配字符串开头的字符串,这些字符串以空格或换行符开头:(^|\A|\s)
3- 我希望我的代码能够捕获以 www 开头的网址。为此,我添加了另一个正则表达式过滤器,也使用起始过滤器:(^|\A|\s)。它不会获取“http://www.”链接,因为在“www”之前有斜杠。
希望此代码对某些人有所帮助。允许评论!
我正在寻找一个将现有图像链接到其源文件并使用 fancybox 的脚本。
我使用了 Geert 的函数并进行了一些更改。
$reg_exUrl = “/((((http|https|ftp|ftps):\/\/)|www.)[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(\/?\S*))/”;
这对于所有查询字符串和斜杠都运行良好
这是一个不错的函数,可以将文本转换为链接,包括电子邮件链接(抱歉,没有 FTP)。
我没有搜索任何域名扩展名,而是包含了最流行的扩展名,因此像“example.fake”这样的文本不会被视为链接。其他域名扩展名可以轻松添加。
这也考虑了句点和逗号。
这些值有效
这些值无效
Mark,你的解决方案是最好的。但是如何设置任何域名扩展名呢?比如我需要设置意大利域名(.it),在这种情况下我必须手动在模式中添加它。它必须排除任何域名扩展名。你能帮我一下吗?
嗨,我使用的是**第一个代码**,但是如何搜索更多单词呢?
如果找到第一个单词,则转到A,如果找到第二个单词,则转到B,依此类推…
// 你想要过滤 URL 的文本
$text = “你想要过滤的文本在这里。 http://google.com“;
应该还有另一个使用
DOMDocument
类的例子 :)在WordPress中,我喜欢将其设置为过滤器,以便可以快速轻松地在任何地方使用它。
如果你使用WordPress,则不需要这样做,因为它自带了
make_clickable()
。在花费几个小时编写php代码来转换链接后,我非常高兴我看到了Ian Dunn关于WordPress的make_clickable()的评论。
使用正则表达式的代码无法完全正常工作。
我编写了这段代码。它更全面,但它有效
查看此处的结果:您要链接的文本…
查看此处的源代码:您要链接的文本…
这是我替换字符串中所有URL的简短代码。希望我帮到了你。
谢谢!原始方法不起作用。出现语法错误。但这个运行良好!并且字符串中有多个URL是必须的。
我创建了一个函数,它将捕获网络链接和图像链接
这将捕获所有以jpeg、jpg、png和gif结尾的链接,请记住它不会捕获以gif?blabla结尾的链接
谢谢兄弟。你的代码运行得很好。
只想分享一下如果有人感兴趣,我们如何在ruby中做到这一点。
"你想要过滤的文本在这里。http://google.com".
gsub(/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/) {|s|
"<a href ='#{s}'>#{s}</a>"
}
文章中的正则表达式有效,但它也会返回匹配组,你可能不想要这些匹配组,并且会弄乱你的结果。一个简单的解决方法是使用?忽略这些匹配组。
例如:
(?:http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(?:\/\S*)?
这将在preg_match中仅返回URL,并在preg_match_all中返回URL数组。
赢了!
@ffsplus2
如何多次重复使用$pattern变量来获取图像?我尝试在分配$newurl = $pattern;之后在字符串中使用echo,但它不起作用。我能想到的唯一替代方案是使用CSS在图像的URL前后添加内容。为什么需要URL?Fancybox :P
这些代码中有任何是在我们键入时执行的吗?
我正在使用这个
呃……算了。我刚刚注意到它正在为每个字符添加无数个链接:/
这解决了我的问题 :)
大家好,我有一个从mysql渲染表格的代码,其中一个字段是url,我需要自动链接功能,我一直在搜索和测试很多,但我找不到解决方案,如果有人能帮我,我将不胜感激,这是我的代码
<?php
$query = "SELECT * FROM
values
ORDER BYid
";$result = mysql_query($query);
if (!$result) {
die("从表中显示字段的查询失败");
}
$fields_num = mysql_num_fields($result);
echo "";
for($i=0; $i<$fields_num; $i++)
{
$field = mysql_fetch_field($result);
echo "".strtr(" {$field->name} ", $transname)."";
}
echo "\n";
while($row = mysql_fetch_row($result))
{
echo "";
foreach($row as $cell)
echo "$cell";
echo "\n";
}
mysql_free_result($result);
?>
我最好再次发布完整的代码,否则会很乱,再次抱歉
如果文本混合了带标签的URL和不带标签的URL怎么办?
例如,像这样
我们如何防止preg_replace()获取第二个URL中的URL,以避免它们被另一个标签替换。
Damir,你做到了。非常感谢。
来自法国的Olivier
谢谢兄弟,
这正是我一直在寻找的模式,我已对其进行了修改以用于单个字符串中的多个URL,但这个想法很棒,非常感谢你,兄弟。继续努力
嗨 - 设置一个新的博客样式数据库,用户可以在其中发布链接。这太棒了 - 感谢热心的程序员社区。
-peter-
一个更好的正则表达式来获取链接,包括music、auto、london等新域名。它还会捕获不以斜杠结尾且只是域名的链接。如果你想解析html,它不会命中href或src属性末尾的引号。
我这里的问题是在php中“如果我输入一个单词,它会匹配2个或更多URL,然后在找到匹配项的地方,它会转到并打开该URL”。
例如,如果我输入一个单词“computerscience”,它会在哪个URL中匹配存在“computerscience”的单词,例如http:\www.compterscience.com,该URL将在下一页打开。
请回复
请更新代码。受限于:{2,3},它不适用于长度超过3个字符的长扩展名,例如:INFO
这将返回图像以及链接..它将适用于所有类型的Url(也许)..我在Facebook中使用了它,它在其中起作用..
/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~|!:,.;]*[-A-Z0-9+&@#\/%=~|])/i
如果我的文本包含一个URL,则此regEx对我来说效果很好。但如果我的文本包含多个URL,则从第二个URL文本开始,它不会将文本更改为URL。
大家好。
以下示例代码将字符串中的所有URL都转换为链接
无论它是否包含localhost等链接。
此页面中的一些代码片段存在错误。
最后,以下代码对我有用。注意:不支持FTP
非常感谢这个!这正是我要找的!
无论如何,我刚刚发现了一点错误,就像其他人遇到的一样。
这只是允许在两个双引号内包含双引号的问题。
我只是在我想包含在内的双引号前面加上了反斜杠。
这是我修复后的版本。
{$url[0]} ", $text);
} else {
// 如果文本中没有URL,则只返回文本
echo $text;
}
?>
如果存在
http://something.com
和
链接
在内容中,我们如何才能只为其中一个添加链接,因为另一个默认情况下是自动链接?
使用正则表达式并不清楚发生了什么……是否可以有人不用正则表达式来写?
您好,感谢您的帮助。我实际上不是程序员,但我认为您可能可以提供帮助。使用相同的代码,您能否帮我做这件事?
搜索文本开头带有“@”的文本(即 @google),然后将“@google”链接到 Instagram(即 https://www.instagram.com/google),以便 @myname 链接到 https://www.instagram.com/my name
我想转发 Instagram 上的搞笑图片,但同时希望在发布时注明来源。
谢谢。
这篇博文……怎么说呢?非常相关!我终于找到了对我有帮助的东西。
谢谢!
有一个可用的 URL 高亮库。它涵盖了许多边缘情况。查看它:https://github.com/vstelmakh/url-highlight