Php 更改正则表达式模式与函数返回值的匹配

Php 更改正则表达式模式与函数返回值的匹配,php,preg-match,return-value,Php,Preg Match,Return Value,我有以下变量: $text = 'This is a sentence [url=http://site.com] that contains urls [url=javascript:alert();]'; 以及验证URL的以下代码行: $text = preg_replace('/\[url=([^\\]]+)]/', filter_var('$1', FILTER_VALIDATE_URL), $text); 输出: “这是一个包含URL的句子” 如何获得以下内容作为输出 “这是一个包

我有以下变量:

$text = 'This is a sentence [url=http://site.com] that contains urls [url=javascript:alert();]';
以及验证URL的以下代码行:

$text = preg_replace('/\[url=([^\\]]+)]/', filter_var('$1', FILTER_VALIDATE_URL), $text);
输出:

“这是一个包含URL的句子”

如何获得以下内容作为输出

“这是一个包含url的句子”

$text=”这是一个句子[url=http://site.com]包含url[url=javascript:alert();];
$text=preg\u replace\u回调(
'/\[url=([^\\]]+)]/',
函数($url){
$clean=filter\u var($url[1],filter\u VALIDATE\u url);
如果($清洁){
返回“”;
}否则{
返回“”;
}
},
$text
);
请参见

$text='这是一个句子[url]=http://site.com]包含url[url=javascript:alert();];
$text=preg\u replace\u回调(
'/\[url=([^\\]]+)]/',
函数($url){
$clean=filter\u var($url[1],filter\u VALIDATE\u url);
如果($清洁){
返回“”;
}否则{
返回“”;
}
},
$text
);

请参见

注意,您可能仍然需要html escape
$clean
.sağolasın@Halil ama tam istediğim değil。我会看看是否可以继续执行您的步骤并满足我的需要。@mavili,验证olmayanlar hiçgelmiyorsun Istiyorson sanırğm,更新ettim.elinize saık@HalilÖzgürNote,您可能仍然需要html escape
$clean
.saıolasın@Halil ama tam istedimğim değil。我会看看是否可以继续执行您的步骤并满足我的需要。@mavili,验证olmayanlar hiçgelmiyorsun istiyorsun sanırım,更新ettim.elinize saık@HalilÖzgğrgreat!这就是我需要的。然而,你能解释一下它是如何工作的吗?函数
url()
如何在引号中实际执行?我的方法是旧的,而@H的preg\u replace\u回调是新的方法(5.3+)。在过去,php使用字符串进行回调。像eval(string)。还要注意,
/e
可能会导致安全漏洞,不推荐使用,不鼓励使用:太好了!这就是我需要的。然而,你能解释一下它是如何工作的吗?函数
url()
如何在引号中实际执行?我的方法是旧的,而@H的preg\u replace\u回调是新的方法(5.3+)。在过去,php使用字符串进行回调。与eval(string)类似。还要注意,
/e
可能会导致安全漏洞,不推荐使用:
$text = 'This is a sentence [url=http://site.com] that contains urls [url=javascript:alert();]';
$text = preg_replace_callback(
    '/\[url=([^\\]]+)]/',
    function ($url) {
        $clean = filter_var($url[1], FILTER_VALIDATE_URL);
        if ($clean) {
            return '<a href="' . $clean . '">' . $clean . '</a>';
        } else {
            return "";
        }
    },
    $text
);
<?php

$text = 'This is a sentence [url=http://site.com] that contains urls [url=javascript:alert();]';


function url($url){
    if(filter_var($url, FILTER_VALIDATE_URL))
        return $url;
    return '';
}


$text = preg_replace('/\[url=([^\\]]+)]/e', 'url("$1")', $text);


echo $text;