提问者:小点点

Erropreg_replace_callbackPHP 8[关闭]


Não consigo passar没有PHP 8。

O问题estáno“preg_替换_回调”,

$str = "arquivos/foto.jpg";
function protect($str){
    $str = preg_replace_callback('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
    $str = preg_replace_callback('~&#([0-9]+);~e', 'chr("\\1")', $str);
    $str = str_replace("<script","",$str);
    $str = str_replace("script>","",$str);
    $str = str_replace("<Script","",$str);
    $str = str_replace("Script>","",$str);
    $str = trim($str);
    $tbl = get_html_translation_table(HTML_ENTITIES);
    $tbl = array_flip($tbl);
    $str = addslashes($str);
    $str = strip_tags($str);
    return strtr($str, $tbl);
    $str = str_replace("<script","",$str);
    $str = str_replace("script>","",$str);
    $str = str_replace("<Script","",$str);
    $str = str_replace("Script>","",$str);
    $str = trim($str);
    $tbl = get_html_translation_table(HTML_ENTITIES);
    $tbl = array_flip($tbl);
    $str = addslashes($str);
    $str = strip_tags($str);
    return strtr($str, $tbl);
}

致命错误:未捕获类型错误:preg_replace_callback():参数#2($callback)必须是有效的回调,在/var/www/vhosts/dominio中找不到函数“chr(hexdec(1)),或者函数名无效。通用域名格式。br/httpdocs/thumb。php:10堆栈跟踪:#0/var/www/vhosts/dominio。通用域名格式。br/httpdocs/thumb。php(10):preg_replace_callback()#1/var/www/vhosts/dominio。通用域名格式。br/httpdocs/thumb。php(29):protect()#2{main}抛出在/var/www/vhosts/dominio中。通用域名格式。br/httpdocs/thumb。php在线10


共1个答案

匿名用户

一个estrutura da funição espera:

preg_replace_callback(
    string|array $pattern,
    callable $callback,
    string|array $subject,
    int $limit = -1,
    int &$count = null,
    int $flags = 0
): string|array|null

Veja Qo o SangundoPar Metro“可赎回的美元回调”,DeVe SueMuaFuang-Cou.O.S.塔尔维兹在意甲联赛中感兴趣的信息来源是一家公司,该公司拥有一家公司。

从形式上来说,这是一个很好的例子:

// Callback
function callbackCHR1(){
    return chr(hexdec("\\1"));
}
function callbackCHR2(){
    return chr(hexdec("\\1"));
}
...
$str = preg_replace_callback('~&#x([0-9a-f]+);~ei', callbackCHR1(), $str);


$str = "arquivos/foto.jpg";

function protect($str){
   $str = preg_replace_callback('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
   $str = preg_replace_callback('~&#([0-9]+);~e', callbackCHR2(), $str);
   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);

   return strtr($str, $tbl);

   // *** Nada daqui para baixo vai ser executado pois o return acima irá parar a função
   // Se deseja remover scripts, o strip_tags adicionado acima já o fará. 
   // Acredito que o código tenha sido copiado de forma repetida sem intenção :)

   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);
 
   return strtr($str, $tbl);
}