D2th3 3 Denunciar post Postado Setembro 28, 2015 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 Compartilhar este post Link para o post Compartilhar em outros sites
gabriel.anhaia 1 Denunciar post Postado Setembro 28, 2015 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 '<pre>'; print_r($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'. Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Setembro 28, 2015 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. Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Setembro 29, 2015 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. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 30, 2015 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 Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Setembro 30, 2015 Boa noite Beraldo, Isso significa que o script continuará funcionando até no PHP 7? Poderia me passar algo do que se trata modificadores? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 30, 2015 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 Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Setembro 30, 2015 Obrigado Beraldo, Vou fazer o mini curso. At Compartilhar este post Link para o post Compartilhar em outros sites