Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Li o Manual do PHP sobre a função preg_replace_callback, mas não consegui compreender o funcionamento.
Alguém poderia me passar explicação?
Tenho um script abaixo que serve para limpar um texto:
function LimpaTexto($texto) {
$texto = html_entity_decode($texto);
$texto = strtolower(trim($texto));
$replaces = array(
'/[áaãâäÁAAÂÄ]/' => 'a',
'/[éèêë&ÉEeË]/' => 'e',
'/[íìîïÍ]/' => 'i',
'/[óòõôöOÔÓÖO]/' => 'o',
'/[úùûüÚUUÜ]/' => 'u',
'/[çÇ]/' => 'c',
'/[ñnN]/' => 'n',
'/\s[\s]+/' => '-',
'/( )/' => '-',
'/( )\/( )/' => '-',
'/( )[-]( )/' => '-',
'/\//' => '-',
'/[^a-z0-9\-_]/' => '',
'/-+/' => '-',
'/[.]/' => '-'
);
$texto = preg_replace(array_keys($replaces), array_values($replaces), $texto);
return $texto;
}
Preciso de ajuda para ajustar esse script e se não for pedir muito uma breve explicação sobre a função preg_replace_callback em seu funcionamento nesse script.
Obrigado
Olá GDrop,
No formato que você exemplificou ficou bem mais simples de entender o funcionamento.
Essa nova função (preg_replace_callback) vai converter a ocorrencia buscada com o meu Regex em um novo Array e com isso não terei como resgatar o valor ou a chave do Array anterior para informar o caracter que eu desejo torcar.
Exemplo
'/[áãâäÁÂÄ]/' => 'a',
Dessa forma eu terei que desmembrar item por item.
Obrigado.
Trabalhando com a nova função preg_replace_callback eu não gostei. Fico imaginando o motivo que o PHP teve para descontinuar a função preg_replace.
Fico imaginando o motivo que o PHP teve para descontinuar a função preg_replace.
A função preg_replace não foi descontinuada
Apenas o modificador "e" é considerado obsoleto.
Veja:
>
Erros ¶
Um nível de erro E_DEPRECATED é emitido quando passado o modificador "\e".
Fonte: http://php.net/manual/pt_BR/function.preg-replace.php
Você pode continuar usando preg_replace sem medo. Só deve usar preg_replace_callback se precisar utilizar uma função para modificar a forma como preg_replace faz as substituições
E o seu código original não precisa ser alterado. Só precisaria se usasse o modificador "e"
Lista de modificadores:
http://php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php
Boa noite Beraldo,
Isso significa que o script continuará funcionando até no PHP 7?
Poderia me passar algo do que se trata modificadores?
Obrigado.
Isso significa que o script continuará funcionando até no PHP 7?
Sim.
Inclusive, você pode baixar o PHP 7 (ainda é RC, mas está bem estável) e testar. No meu Mini-curso gratuito de PHP 7 eu ensino a instalar o PHP 7 sem afetar o seu PHP estável, e mostro essa e outras dicas
Poderia me passar algo do que se trata modificadores?
São estes:
http://php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php
Obrigado Beraldo,
Vou fazer o mini curso.
At
Boa noite, o preg_replace_callback funciona da seguinte forma, observe o exemplo:
$text = "Olá Mundo";
// A função de Callback
function teste($matches)
{
echo preg_replace_callback(
"|á|",
"teste",
$text);
quando ele é chamado ele passa o Match como parâmetro para a função definida como Callback passado no segundo parâmetro dele (Em vermelho). Ele retorna o restante que no exemplo cai no echo. o Match(letra á no exemplo) vai como um array para a função 'teste'.