A imaginação é mais importante que o conhecimento. (Albert Einstein)

logo Moraga  
Principal
Categorias
Ferramentas

telescópio

Semanal Mensal Geral
  1. Converter Byte em KB, MB, GB, TB, EB
  2. Verificar CPF com PHP
  3. Captcha em PHP
  4. Jogo da velha ou Tic tac toe
  5. Copiando tabelas e removendo registros duplicados no MySQL
  6. removeChild - Remover elementos HTML por Javascript
  7. createElement - Solução compatível com os navegadores
  8. Removendo linhas e espaços em branco de strings
  9. Apache Expires Header - Cache de imagens, Javascript e CSS
  10. Verificar se existe um valor no Array em Javascript
  1. Converter Byte em KB, MB, GB, TB, EB
  2. Verificar CPF com PHP
  3. Captcha em PHP
  4. Copiando tabelas e removendo registros duplicados no MySQL
  5. Jogo da velha ou Tic tac toe
  6. createElement - Solução compatível com os navegadores
  7. removeChild - Remover elementos HTML por Javascript
  8. Gerando Thumbnails com PHP
  9. Removendo linhas e espaços em branco de strings
  10. Apache Expires Header - Cache de imagens, Javascript e CSS
  1. Converter Byte em KB, MB, GB, TB, EB
  2. Captcha em PHP
  3. Jogo da velha ou Tic tac toe
  4. createElement - Solução compatível com os navegadores
  5. Copiando tabelas e removendo registros duplicados no MySQL
  6. Apache Expires Header - Cache de imagens, Javascript e CSS
  7. Removendo linhas e espaços em branco de strings
  8. removeChild - Remover elementos HTML por Javascript
  9. Verificar se existe um valor no Array em Javascript
  10. Gerando Thumbnails com PHP
e-mail Enviar por e-mail imprimir Imprimir
PHP

Highlight - Destacando caracteres e strings com PHP

Por Alejandro Fernandez Moraga

highlight - formata as ocorrências da string pesquisada na string de entrada. É possível definir diferentes formatos para cada ocorrência, definir se a consulta será case-sensitive (caracteres maiúsculos e minúsculos são diferenciados) ou case-insensitive e descobrir o posicionamento das ocorrências. Permite também a pesquisa por truncamento de strings.

O efeito de destaque (highlight) é utilizado com freqüência em sistemas de busca. A palavra ou expressão pesquisada é destacada facilitando a visualização no contexto.

Sintaxe

highlight ( string $search, string $str, string $format [, bool $like , bool $sensitivity, array &$pos ] )

Exemplos:

<?php

// Destaque simples
$string = 'Estrondo produzido por descarga de eletricidade atmosférica.';
highlight('descarga', $string, '<b>%s</b>');
// Estrondo produzido por descarga de eletricidade atmosférica.

// Alterna os formatos das ocorrências
$string = 'Chovia, chovia e chovia.';
hightlight('chovia', $string, array('<b>%s</b>', '<em>%s</em>'));
// Chovia, chovia e chovia.

// Truncamento - Formata a string aceitando truncamento de strings
$string = 'O céu ficou azulado!';
highlight('azul', $string, '<b>%s</b>', true);
// O céu ficou azulado!

// Consulta case-sensitive com truncamento
$string = 'Arma e armadura';
highlight('arma', $string, '<b>%s</b>', true, true);
// Arma e armadura

// Posições das ocorrências na string de entrada
$pos = array();
highlight('não', 'eu não sei até quando vai chover', false, false, $pos);
echo($pos); // 3

?>

Código fonte

<?php

/**
 * Destaca as ocorrências de uma string.
 *
 * @author Alejandro Fernandez Moraga <moraga86@gmail.com>
 * @link http://www.moraga.com.br
 * @param string $search String pesquisada
 * @param string $str String de entrada
 * @param mixed $format Formato(s) da string pesquisada
 * @param bool $like Define se será aceito o truncamento de strings
 * @param bool $sensitivity Define se caracteres maiúsculos e minúsculos serão diferenciados
 * @param array $pos Armazena as posições das ocorrências
 * @return string
 */

function highlight($search, $str, $format, $like=false, $sensitivity=false, &$pos=null) {
	
	$ret = '';
	
	$len = strlen($str);
	$s_len = strlen($search);
	
	$_tag = false;
	$_ignore = -1;
	
	$format = (is_array($format)) ? $format : array($format);
	$f_len = count($format);
	$f_last = 0;
	
	$end = array(' ', ',', '.', ';',
			'(', ')','[', ']', '{', '}',
			'!', '?', '<', '>', '"', '\'', '\\', '/', '|');
	
	$f = ($sensitivity) ? 'ord' : 'strtolower';
	
	for ($i=0; $i < $len; $i++) {
		
		if ($i < $_ignore)
			continue;
			
		if ($str{$i} == '<' && isset($str{$i+1}) && preg_match('|[A-Z\/]|i', $str{$i+1}))
			$_tag = true;
		else if ($_tag && $str{$i} == '>')
			$_tag = false;

		if (!$_tag && $f($search{0}) == $f($str{$i}) && isset($str{$i+$s_len-1})) {
			
			$tmp = null;
			$is = true;
			
			for ($j=0; $j < $s_len; $j++) {
				if ($f($search{$j}) != $f($str{$i+$j})) {
					$is = false;
					break;
				}
				else
					$tmp .= $str{$i+$j};
			}
			
			if ($is && ($like || (!isset($str{$i+$j+1}) || in_array($str{$i+$j}, $end)))) {

				if (!is_null($pos))
					$pos[] = $i;

				$_ignore = $i + $s_len;
				
				if ($f_last > $f_len - 1)
					$f_last = 0;
				
				$ret .= str_replace('%s', $tmp, $format[$f_last]);
				
				$f_last++;
			}
			else
				$ret .= $str{$i};
		}
		else
			$ret .= $str{$i};
	}
	
	return $ret;
}

?>

Comentar
captcha