有人可以帮助修复下一个功能吗?其目的是找到一个文本链接并使其可以按照一定的规则点击。接下来的问题是:我不知道如何将变量插入 $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);
在当前代码中执行此操作,您会发现 的值为$function
,NULL
因此会出现错误。每当您switch
上线时,请记住这种default
情况会导致错误。如果您想绕过$function
,则需要有一个条件来检查if (!empty($function)) ...
,并相应地返回转换后的/纯文本 URL。
在上面的代码中,该变量$phpEx
也是未定义的。(我认为这是一个正在进行中的函数。)您可以将它use
与您可能想要使用的其他变量一起包含在语句中:use ($function, $phpEx)
--但显然,您必须在代码中的某个位置定义它。大概会是这样.php
。您可能希望将其定义为常量,以使其在整个代码中可用,而无需担心变量范围。
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消