需要帮助重写PHP函数吗

需要帮助重写PHP函数吗,php,regex,Php,Regex,我有一个函数,可以解析文本表单帖子,如果帖子中有链接,它会将链接重定向到一个页面,在用户单击该页面之前,该页面会警告用户有关外部链接的信息 function url2link($txt) { $setUrl = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/", '<a href="/link/$2$3" rel="nofollow">$2$4</a>', $txt);

我有一个函数,可以解析文本表单帖子,如果帖子中有链接,它会将链接重定向到一个页面,在用户单击该页面之前,该页面会警告用户有关外部链接的信息

function url2link($txt) {
     $setUrl = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/", '<a href="/link/$2$3" rel="nofollow">$2$4</a>', $txt);
     return $setUrl;
}
函数url2link($txt){

$setUrl=preg\u replace(“/(http:\/\/(www\))(([^\s尝试使用,然后您可以处理匹配,以确定它是您自己的域还是其他域。

好的,事实证明preg\u replace\u回调正是我在本例中所需要的。php.net文档糟透了。我找到了另一篇文章,清楚地说明了它是什么以及它是如何工作的。我修改了我的函数,但它不起作用……是什么我失踪了

function url2link($txt) {

$checkDomain = preg_replace_callback('/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/', 'linkDomain', $txt);

   function linkDomain($matches) {

    $host =  parse_url($matches[0], PHP_URL_HOST);
    $host =  ltrim($host, 'www.');

    if ($host == 'mydomain.com') {
        $setUrl = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/", '<a href="http://$2$3">$2$4</a>', $matches[0]);
    } else {
        $setUrl = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/", '<a href="/link/$2$3" rel="nofollow">$2$4</a>', $matches[0]);
    }
   }
   return $setUrl;
}
函数url2link($txt){

$checkDomain=preg\u replace\u回调('/(http:\/\/|(www\))([^\splese clearify-此文本是否从一大块内联文本(例如文本区域)中提取在其中可能会遇到多个URL?或者是否有专门的URL表单字段,可能是逗号分隔的?有人在前面提到过,但我不知道如何应用此解决方案…是的,我只是重复了一遍,但我想这个概念太不一样了,我无法理解。我知道它不会像preg_repla那样替换ce,但我仍然不清楚如何使用它。我重新编写了我的函数,但它似乎不起作用。我在我自己的答案中发布了它。为什么你说php文档很糟糕?它实际上是最好的资源之一。如果你想要一些不好的东西,看看facebook。无论如何,看起来你仍然在尝试使用
$txt
,不要。匹配已完成,请执行打印($matches)
在你的linkDomain函数中,并使用它。我一直使用php.net作为参考,但我就是不能掌握这个函数。我想对于没有受过正式开发培训的人来说。是的,Facebook文档有很多漏洞。无论如何,我一定是做错了什么。我甚至不能通过放入print\r($matches)来看到任何数组值a在linkDomain($matches)函数或任何相关值中。我认为它已损坏,但不确定在何处。好的,上面已更新。仍然有一些不合适的地方--不工作。在其他人的帮助下解决了。我正在将一个函数放入另一个函数中。。。
function url2link($txt) {

$checkDomain = preg_replace_callback('/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/', 'linkDomain', $txt);

   function linkDomain($matches) {

    $host =  parse_url($matches[0], PHP_URL_HOST);
    $host =  ltrim($host, 'www.');

    if ($host == 'mydomain.com') {
        $setUrl = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/", '<a href="http://$2$3">$2$4</a>', $matches[0]);
    } else {
        $setUrl = preg_replace("/(http:\/\/|(www\.))(([^\s<]{4,68})[^\s<]*)/", '<a href="/link/$2$3" rel="nofollow">$2$4</a>', $matches[0]);
    }
   }
   return $setUrl;
}