Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
desenvolvi um sistema de buscas (php e mysql) e o resultado é mostrado no browser... o que eu quero é realçar o termo pesquisado, da mesma forma que ocorre aqui no forum do imasters...
o problema é que eu não estou conseguindo realçar a expressão sem alterar o conteúdo, vejam o código:
$texto = "UM DOIS TRES. Um Dois Tres. um dois tres";$termo_pesquisado = "um";$texto = eregi_replace($termo_pesquisado,'<span class="destaque">'.$termo_pesquisado.'</span>',$texto);
o que acontece é que eu gostaria de realçar os tres "uns" (UM, Um, um), mas utilizando o código que eu mostrei eu vou encontrar o termo pesquisado (que é "um") porém na hora de realçar eu vou estar modificando o texto original ("UM" vai virar "um" e "Um" vai virar "um").
se eu utilizar ereg_replace ao invés de eregi_replace o realce só vai acontecer em "um".
alguém poderia me ajudar nesse problema?
obrigado!
usa issu:$texto = "UM DOIS TRES. Um Dois Tres. um dois tres";$termo_pesquisado = sql_regcase("um");If(preg_match_all('/'.$termo_pesquisado.'/', $texto,$array)){ $array_sec = $array[0]; Foreach($array_sec as $value) { $texto_array[] = ereg_replace($value,'<b>'.$value.'</b>',$value); } echo "<pre>".print_r($texto_array)."</pre>";} ;) ve se da certo ;) :lol:
Desafio PHP Fórum iMasters Nº4
usa issu:$texto = "UM DOIS TRES. Um Dois Tres. um dois tres";$termo_pesquisado = sql_regcase("um");If(preg_match_all('/'.$termo_pesquisado.'/', $texto,$array)){ $array_sec = $array[0]; Foreach($array_sec as $value) { $texto_array[] = ereg_replace($value,'<b>'.$value.'</b>',$value); } echo "<pre>".print_r($texto_array)."</pre>";} ;) ve se da certo ;) :lol:
vlw gente boa, foi preciso fazer uma adaptação mas funcionou perfeitamente... eu não conhecia a função sql_regcase... ela é interessante... eu estava pensando em implementar justamente o que ela faz caso ninguém fosse me ajudar...será que dava pra tirar outras dúvidas minhas: 1- qual a necessidade de inserir isso '/' na preg_match_all? fui ao site do php e vi q os exemplos tb inserem essa '/'... mas pq? onde q fala q tem q inserir isso?!2- eu estava tentando utilizar a função ereg, existe um meio de obter o resultado q eu queria sem utilizar a função preg_match_all, ou seja, utilizando as funções de expressão regular no estilo posix e não perl?!?agradeço muito pelo ajuda... se precisar estamos aí...
bom...respondendo...1) o "/" do preg tem q ser colokado delimitando sua ER..por q eh do padrão PERL...o do ereg eh POSIX...q naum tem issu2) com ereg naum da naum...pq o maximo q você pode fazer eh especificar um terceiro argumento pro ereg...dae somente a primeira expressão q casar será armazenada na variavelno preg_math_all o terceiro argumento eh o nome do array onde vaum estar salvas todas as suas expressões q casarampelo q eu entendi, o ereg naum tem algo tipo "ereg_all" :s dae naum axei nenhuma função q guardasse num array todos os casamentos :P ;)
bom...respondendo...1) o "/" do preg tem q ser colokado delimitando sua ER..por q eh do padrão PERL...o do ereg eh POSIX...q naum tem issu2) com ereg naum da naum...pq o maximo q você pode fazer eh especificar um terceiro argumento pro ereg...dae somente a primeira expressão q casar será armazenada na variavelno preg_math_all o terceiro argumento eh o nome do array onde vaum estar salvas todas as suas expressões q casarampelo q eu entendi, o ereg naum tem algo tipo "ereg_all" :s dae naum axei nenhuma função q guardasse num array todos os casamentos :P ;)
vlw pelas respostas... mas dando uma olhada eu vi q o ereg consegue armazenar os resultados encontrados num vetor (no seu terceiro argumento), semelhante ao que acontece com preg_match_all, porém pra isso ele busca casar por expressões entrem parenteses no seu segundo argumento, ex: ereg('(um)(UM)(Um)',$texto,$vetor)... no final $vetor[0] vai armazenar todos os resultados encontrados, etc, etc.. semelhante ao preg_match_all... o problema agora seria gerar essa variação do um/UM/Um... criando uma função manualmente tem como, mas uma função do php que faça isso eu não sei...no mais, resolvi o meu problema utilizando preg_match_all... tá funcionando perfeitamente... mais uma vez obrigado!abraços.
<?
$texto = "UM DOIS TRES. Um Dois Tres. um dois tres";
$termo_pesquisado = sql_regcase("um");
if(preg_match_all('/'.$termo_pesquisado.'/', $texto, $array)) {
$array_sec = $array[0];
foreach($array_sec as $value)
$texto = ereg_replace($value, '<font color=red>'.$value.'</font>', $texto);
print $texto;
}
?>
ficou massa! ja apliquei num sistema aki :) valew. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
não sei se to falando besteira mas o str_replace não funciona não?