PHP。如何在 preg_replace_callback() 中将变量插入 $function(variable):
PHP. How to insert variable into $function(varible) in preg_replace_callback():
谁能帮忙修复下一个功能。它的目的是找到一个文本 link 并使其可按特定规则点击。
接下来的问题是:
我不知道如何将变量插入 $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>
您不需要在 preg_replace_callback
中声明一个全局变量。您可以简单地使用 use
语句,它可用于使直接范围内的变量可用于 closure/anonymous 函数(see manual, ex. 3 ff.);如下:
$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)) ...
,并且 return 一个 transformed/plain URL 相应地。
在您上面的代码中,变量 $phpEx
也是未定义的。 (我认为这是一个正在进行的工作。)您可以将它包含在 use
语句中,以及您可能想要使用的其他变量:use ($function, $phpEx)
- 但您必须定义显然,它在你的代码中的某个地方。大概是 .php
。您可能希望将其定义为常量,以使其在您的所有代码中都可用,而无需担心变量范围。
谁能帮忙修复下一个功能。它的目的是找到一个文本 link 并使其可按特定规则点击。 接下来的问题是: 我不知道如何将变量插入 $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>
您不需要在 preg_replace_callback
中声明一个全局变量。您可以简单地使用 use
语句,它可用于使直接范围内的变量可用于 closure/anonymous 函数(see manual, ex. 3 ff.);如下:
$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)) ...
,并且 return 一个 transformed/plain URL 相应地。
在您上面的代码中,变量 $phpEx
也是未定义的。 (我认为这是一个正在进行的工作。)您可以将它包含在 use
语句中,以及您可能想要使用的其他变量:use ($function, $phpEx)
- 但您必须定义显然,它在你的代码中的某个地方。大概是 .php
。您可能希望将其定义为常量,以使其在您的所有代码中都可用,而无需担心变量范围。