为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 preg_replace_callback() 中将变量插入到

如何在 preg_replace_callback() 中将变量插入到

PHP
LEATH 2023-07-08 22:05:53
有人可以帮助修复下一个功能吗?其目的是找到一个文本链接并使其可以按照一定的规则点击。接下来的问题是:我不知道如何将变量插入 $function( variable ) 中。该变量是在preg_replace_callback中生成的Fatal error: Uncaught Error: Function name must be a string in....function make_clickable($text){    switch( 'strrev' )    {        case 'strrev':            $function = 'strrev';        break;                case 'base64':            $function = 'base64_encode';        break;                default:            $function = '';        break;    }    $text = preg_replace_callback("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#si",         function ($m){            global $function;        return "'$m[1]<a href=\"out.' . $phpEx . '?url=" . urlencode( $function( $m[2]) ). "\" target=\"_blank\">$m[2]</a>'";    }, $text);    return($text);}echo make_clickable('text http://example.net text');// <a href="./out.php?url=net.example%2F%2F%3Aptth" target="_blank">http://example.net</a>
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您不需要在preg_replace_callback. 您可以简单地使用该use语句,该语句可用于使直接作用域中的变量可用于闭包/匿名函数,如下:

$text = preg_replace_callback("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#si", 
    function ($m) use ($function) {
        return "'$m[1]<a href=\"out.' . $phpEx . '?url=" . urlencode( $function( $m[2]) ). "\" target=\"_blank\">$m[2]</a>'";
}, $text);

如果您var_dump($function);在当前代码中执行此操作,您会发现 的值为$functionNULL因此会出现错误。每当您switch上线时,请记住这种default情况会导致错误。如果您想绕过$function,则需要有一个条件来检查if (!empty($function)) ...,并相应地返回转换后的/纯文本 URL。

在上面的代码中,该变量$phpEx也是未定义的。(我认为这是一个正在进行中的函数。)您可以将它use与您可能想要使用的其他变量一起包含在语句中:use ($function, $phpEx)--但显然,您必须在代码中的某个位置定义它。大概会是这样.php。您可能希望将其定义为常量,以使其在整个代码中可用,而无需担心变量范围。


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信