Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SkelletonX

Deprecated: preg_replace() [ERRO]

Recommended Posts

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in C:\X\X\X\X.php on line 50

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in C:\X\X\X\X.php on line 51

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in C:\X\X\X\X.php on line 50

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in C:\X\X\X\X.php on line 51

RAwSK1y.png

 

 

 

Codigo :

function protect( $str )
{
if( !is_array( $str ) ) {
$str = preg_replace("/(from|select|insert|delete|where|drop table|show tables)/i","",$str);
$str = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
$str = preg_replace('~&#([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);
}
else return $str;
}

dei include e usei assim ...

$login = protect( $_POST["login"] );
$senha = protect( $_POST["senha"] );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

Não consegui entender direito a sua dúvida. Qual a versão do PHP que você usa? Estes avisos são lançados desde as versões 5.5.X do PHP quando é utilizado o modificador /e como parâmetro da função preg_replace(). Na própria documentação do PHP é indicado que nestes casos seja utilizada a função preg_replace_callback().

Segue a documentação http://php.net/manual/pt_BR/migration55.deprecated.php .

Abraços, Diogo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, pois a função foi reescrita desde as versões 5.5.x para melhorar seu desempenho, entre outras coisas.

 

 

 

Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line 49

 

Warning: preg_replace_callback(): Requires argument 2, 'chr(hexdec("\1"))', to be a valid callback inC:\xampp\htdocs\Paginas\functions.php on line 50

 

Warning: preg_replace_callback(): Requires argument 2, 'chr("\1")', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line51

 

Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line 49

 

Warning: preg_replace_callback(): Requires argument 2, 'chr(hexdec("\1"))', to be a valid callback inC:\xampp\htdocs\Paginas\functions.php on line 50

 

Warning: preg_replace_callback(): Requires argument 2, 'chr("\1")', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line51

function protect( $str )
{
if( !is_array( $str ) ) {
$str = preg_replace_callback("/(from|select|insert|delete|where|drop table|show tables)/i","",$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);
}
else return $str;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observe que após a linha 49 você não usa mais "/". Isso é necessário para funcionar corretamente.

Aproveitando a deixa recomendo:

https://regex101.com/r/zB8lE5/1 - pra testar ERs.

http://php.net/manual/pt_BR/function.preg-quote.php- Escapar caracteres

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observe que após a linha 49 você não usa mais "/". Isso é necessário para funcionar corretamente.

Aproveitando a deixa recomendo:

https://regex101.com/r/zB8lE5/1 - pra testar ERs.

http://php.net/manual/pt_BR/function.preg-quote.php- Escapar caracteres

 

deixar assim?

 

$str =  preg_replace_callback('/~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
$str =  preg_replace_callback('/~&#([0-9]+);~e', 'chr("\\1")', $str);

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, pois a função foi reescrita desde as versões 5.5.x para melhorar seu desempenho, entre outras coisas.

Fonte http://php.net/manual/pt_BR/migration55.deprecated.php

Vale lembrar que a função não está obsoleta,apenas o modificador /e.

 

Up.

Importante citar os modificadores do padrão

http://php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

deixar assim?

 

$str =  preg_replace_callback('/~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
$str =  preg_replace_callback('/~&#([0-9]+);~e', 'chr("\\1")', $str);

 

No início e no final da string. Isso resolverá o problema, não sendo necessário utilizar outra função do php

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

No início e no final da string. Isso resolverá o problema, não sendo necessário utilizar outra função do php

 

 

isso oque eu fis mesmo assim da erro...

 

Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line 49

 

Warning: preg_replace_callback(): Requires argument 2, '/chr(hexdec("\1"))/', to be a valid callback inC:\xampp\htdocs\Paginas\functions.php on line 50

 

Warning: preg_replace_callback(): Requires argument 2, '/chr("\1")/', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line 51

 

Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line 49

 

Warning: preg_replace_callback(): Requires argument 2, '/chr(hexdec("\1"))/', to be a valid callback inC:\xampp\htdocs\Paginas\functions.php on line 50

 

Warning: preg_replace_callback(): Requires argument 2, '/chr("\1")/', to be a valid callback in C:\xampp\htdocs\Paginas\functions.php on line 51

$str = preg_replace_callback("/(from|select|insert|delete|where|drop table|show tables)/i","",$str);
$str =  preg_replace_callback('/~&#x([0-9a-f]+);~ei/', '/chr(hexdec("\\1"))/', $str);
$str =  preg_replace_callback('/~&#([0-9]+);~e/', '/chr("\\1")/', $str);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso que você está tentando fazer não vai funcionar, para uma melhor segurança use a função do seu próprio SGBD, recomendo usar PDO para se proteger disso automaticamente. Para o XSS use htmlentities()

Compartilhar este post


Link para o post
Compartilhar em outros sites

O modificador e (eval) do preg_replace foi depreciado faz tempo.

Quando utilizar o preg_replace_callback, utilize uma função, seja ela um método de classe, função normal (assinatura definida) ou lambda. Exemplo:

$template = '%{nome}, seja bem vindo ao portal %{portal}';
$data = array(
	'nome' => 'Hugo',
	'portal' => 'iMasters',
);

$html = preg_replace_callback('@%\{(\w+)\}@', function($matches) use ($data) {
	if(array_key_exists($matches[1], $data)) {
		return $data[$matches[1]];
	}
	return null;
}, $template);

echo $html;

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

O autor do tópico busca filtrar e escapar de SQL Injection. Basta utilizar Prepared Statements

E evitar todo esse rodeio.

 

Bem frisado. Porém, ao menos eu, me atentei aos erros no preg_replace justamente pelas primeiras respostas não satisfazerem a resolução do dito cujo.

Acho que agrega ao post, já que não tem opção de comentários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.