Jump to content


Photo

Destacar Palavras


  • Faça o login para participar
4 replies to this topic

#1 CSFInfo

CSFInfo

    Normal

  • Usuários
  • 81 posts
  • Sexo:Não informado

Posted 12/07/2005, 02:27

Estou tentando destacar mais de uma palavra numa variável mas ele só destaca a última.

O que está faltando para destacar todas as palavras no texto.

O script seria esse

$palavras = explode(" ", $palavra);  

foreach($palavras as $destaque)
 {

$texto_destacado= preg_replace("/($destaque?)/i","<b>\\0</b>",$texto);

  $i++;

   }


Edição feita por: CSFInfo, 12/07/2005, 02:35.


#2 Kakarotto

Kakarotto

    GoKu - GT

  • Usuários
  • 269 posts
  • Sexo:Masculino
  • Localidade:Paulista-PE
  • Interesses:PHP, MySQL, Java, JavaScvript.

Posted 12/07/2005, 04:11

Tem dois tópicos sobre o mesmo assunto, um deles de sua autoria:

http://forum.wmonlin...7927&hl=destaca
http://forum.wmonlin...0740&hl=destaca

#3 CSFInfo

CSFInfo

    Normal

  • Usuários
  • 81 posts
  • Sexo:Não informado

Posted 12/07/2005, 11:20

Correto todos os dois são de minha autoria acontece que foram devidamente respondidos se me equivoquei abrindo novo tópico me desculpem.

Ocorre que criei uma busca detalhada por palavras-chave ou seja ele consulta por frase exata ou divide a frase em variáveis, se eu utilizar somente para uma palavra ficaria assim:

Para palavra exata ficaria assim

echo  preg_replace("/($destaque?)/i","<b>\\0</b>",$texto);

Para mais de uma palavra não estou conseguindo destacar

Como já haviam me informado que existe um script chamado Mateli (http://mateli.codigolivre.org.br) mas ele destaca por cores no fundo da palavra eu queria que destacasse apenas em negrito.

#4 Klaus

Klaus

    @ ubuntu jaunty

  • Ex-Admins
  • 7924 posts
  • Sexo:Masculino
  • Localidade:127.0.0.1

Posted 12/07/2005, 11:30

Segue o MaTeLi adaptado para fazer negrito ao invés de colocar cor-de-fundo:

<?php

/***************************************************
*@ arquivo: mateli.php (versão 1.0)
*@ descrição: Função para destaque de expressões em textos.
*@ autor: Klaus Paiva <klauspaiva@gmail.com>
*@ modificado em: 08/01/2005 @ 07:26 (GMT -03:00)
*@ última versão: http://mateli.codigolivre.org.br/
*@ documentação: http://mateli.codigolivre.org.br/docs/
***************************************************/

// Criação da função de destaque
function mateli ($destacar, $texto) {

  // Cria uma nova variável com o texto destacado
  $td = "";
 
  // Cria uma variável booleana para controle de tags com conteúdo não destacado
  $bloqueio = false;

  // Cria a expressão regular de destaques
  $er = "/((<.*?>)([^<]*))/sim";

  // Loop que percorre a matriz de expressões...
  for ($i = 0; $i < count ($destacar); $i++) {
 
  // ... criando as expressões regulares para as palavras
  $destacar[$i] = "/(\b$destacar[$i]\B)/sim";
 
  }
 
  // "Casa" o texto recebido com a primeira ER
  preg_match_all ($er, $texto, $c);
 
  // Loop que percorre todos os casamentos...
  for ($k = 0; $k < count ($c[2]); $k++) {
 
  // ... armazenando as tags casadas...
  $td .= $c[2][$k];
 
  // ... verificando se as tags são <script> e <textarea>...
  if (preg_match ("/^(<textarea|<script)/sim", $c[2][$k])) {
 
    // ... para armazenar direto seus conteúdos, sem alterações...
    $td .= $c[3][$k];
   
    // ... bloquear as próximas alterações...
    $bloqueio = true;
   
    // ... e passar para a próxima iteração
    continue;
   
  }
 
  // ... verifica se as tags são <\/script> e </textarea>...
  if (preg_match ("/^(<\/script|<\/textarea)/sim", $c[2][$k])) {
 
    // ... para cancelar o bloqueio de marcação
    $bloqueio = false;
   
  }
 
  // ... verifica se o bloqueio está ativo... (caso contrário, executa o destaque)
  if ($bloqueio == true) {
 
    // ... apenas armazenando o texto, sem destaque...
    $td .= $c[3][$k];
   
    // ... passando para a próxima iteração
    continue;
   
  }
   
 
  // ... criando uma variável para guardar os textos alterados no próximo loop
  $loop = $c[3][$k];
 
  // ... caso contrário, um loop é criado para destacar...
  for ($i = 0; $i < count ($cores); $i++) {
 
    // ... de acordo com as expressões recebidas
    $loop = preg_replace ($destacar[$i], "<b>\\1</b>", $loop);
   
    }
 
  // ... e por fim, armazena o texto alterado pelo laço
  $td .= $loop;
 
  }
 
  // Retorna o texto alterado
  return $td;

}

?>


Klaus Paiva
Conheça também: Taperás

#5 CSFInfo

CSFInfo

    Normal

  • Usuários
  • 81 posts
  • Sexo:Não informado

Posted 12/07/2005, 13:20

Valeu pela ajuda agora eu consegui fazendo algumas alterações está funcionando normal parabéns pelo script muito bom.

Palavras buscadas

 $palavras = explode(" ", $palavra);


 foreach($palavras as $valor)
 {
   $destacar[] = "$valor";
   $i++;
}

Mateli.php

/***************************************************
	*@ arquivo: mateli.php (versão 1.0)
	*@ descrição: Função para destaque de expressões em textos.
	*@ autor: Klaus Paiva <klauspaiva@gmail.com>
	*@ modificado em: 08/01/2005 @ 07:26 (GMT -03:00)
	*@ última versão: http://mateli.codigolivre.org.br/
	*@ documentação: http://mateli.codigolivre.org.br/docs/
	***************************************************/

	// Criação da função de destaque
	function mateli ($destacar, $texto) {

   // Cria uma nova variável com o texto destacado
  $td = "";

  // Cria uma variável booleana para controle de tags com conteúdo não destacado
  $bloqueio = false;

  // Cria a expressão regular de destaques
  $er = "/((<.*?>)([^<]*))/sim";

  // Loop que percorre a matriz de expressões...
  for ($i = 0; $i < count ($destacar); $i++) {

 	 // ... criando as expressões regulares para as palavras
 	 $destacar[$i] = "/(\b$destacar[$i]\b)/sim";

  }

  // "Casa" o texto recebido com a primeira ER
  preg_match_all ($er, $texto, $c);

  // Loop que percorre todos os casamentos...
  for ($k = 0; $k < count ($c[2]); $k++) {

 	 // ... armazenando as tags casadas...
 	 $td .= $c[2][$k];

  // ... verifica se o bloqueio está ativo... (caso contrário, executa o destaque)
 	 if ($bloqueio == true) {

    // ... apenas armazenando o texto, sem destaque...
    $td .= $c[3][$k];

    // ... passando para a próxima iteração
    continue;

 	 }


 	 // ... criando uma variável para guardar os textos alterados no próximo loop
 	 $loop = $c[3][$k];

 	 // ... caso contrário, um loop é criado para destacar...
 	 for ($i = 0; $i < count ($destacar); $i++) {

    // ... de acordo com as expressões recebidas
           $loop = preg_replace ($destacar[$i], "<b>\\1</b>", $loop);

    }

 	 // ... e por fim, armazena o texto alterado pelo laço
 	 $td .= $loop;

  }

  // Retorna o texto alterado
  return $td;

	}

Código na página

require("mateli.php");
echo mateli($destacar, $texto);

----
CSFInfo
Postado em 12 Jul 2005, 22:18

Estou fazendo algumas alterações no script mateli.php para minhas necessidades estou com uma dúvida na expressão regular

$er = "/((.*?)([^>]*))/sim";

Dei uma lida no site http://guia-er.sourceforge.net mas não encontrei pois estou querendo que ele não faça distinção de acentos como no código abaixo:

Ele altera a palavra com ou sem acento.

$texto_destacado= preg_replace("/($destaque?)/i","<b>\\0</b>",$texto);

Não estou conseguindo no script acima.

----

Não poste seguidamente, caso precise alterar/adicionar alguma informação ao seu último post clique no botão [Editar] Posted Image

Edição feita por: fly2k, 13/07/2005, 08:56.





0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq