猿问

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

有人可以帮助修复下一个功能吗?其目的是找到一个文本链接并使其可以按照一定的规则点击。接下来的问题是:我不知道如何将变量插入 $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>


LEATH
浏览 143回答 1
1回答

慕侠2389804

您不需要在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);在当前代码中执行此操作,您会发现 的值为$function,NULL因此会出现错误。每当您switch上线时,请记住这种default情况会导致错误。如果您想绕过$function,则需要有一个条件来检查if (!empty($function)) ...,并相应地返回转换后的/纯文本 URL。在上面的代码中,该变量$phpEx也是未定义的。(我认为这是一个正在进行中的函数。)您可以将它use与您可能想要使用的其他变量一起包含在语句中:use ($function, $phpEx)--但显然,您必须在代码中的某个位置定义它。大概会是这样.php。您可能希望将其定义为常量,以使其在整个代码中可用,而无需担心变量范围。
随时随地看视频慕课网APP
我要回答