//Criado por Fabricio Magri - fnmagri@uol.com.br
//Editado por Bozo - bozo@gambiarra.com.br
//Script anteriormente criado pelo Fabricio, Eu apenas mudei para
//que fosse grifada a palavra em amarelo, antes apenas em em bold
//acrescentei um novo parametro, numero de caracters a serem exibidos
//e coloquei a condição de que se a palavra não estiver no texto
//retorne parte do texto, anteriormente retornava um erro.
//textQuery(TEXTO,PALAVRA BUSCADA,[numero de caracters*Opcional])
$texto = "Esse script retorna uma palavra especifica grifada em um texto, retorna apenas uma parte do texto";
function textQuery($text, $query, $chars='') {
if($chars==''){
$charTrecho = 30;
}else{
$charTrecho = $chars;
}
$charAnt="ÁáÉéÍíÓóÚúÇçÃãÀàÂâÊêÎîÔôÕõÛû& -!@#$%¨&*()_+}=}{[]^~?/:;><,'´`\.\"";
$charPos="AaEeIiOoUuCcAaAaAaEeIiOoOoUu ";
$textNormal = strip_tags($text);
$textFormat = $textNormal;
$textFormat = strtolower(strtr($textFormat, $charAnt, $charPos));
$queryNormal = explode(" ", $query);
$queryFormat = explode(" ", strtolower(strtr($query, $charAnt, $charPos)));
for ($i = 0; $i < count($queryFormat); $i++) {
if (strlen($queryFormat[$i]) == 0) { continue; }
$ini = strpos($textFormat, $queryFormat[$i]);
if ($ini !== false) {
$len = strlen($queryFormat[$i]);
$fim = $ini + $len - 1;
$pos[$fim] = array("ini" => $ini,
"queryFormat" => $queryFormat[$i],
"len" => $len
);
}
}
if($pos==""){
$trecho2 = substr($textNormal, 0, $charTrecho);
$trecho2 = substr("$trecho2", 0, strrpos("$trecho2", " ") + 1) . "...";
}else{
krsort($pos);
reset($pos);
}
$textLen = strlen($textFormat);
for ($i = 0; $i < count($pos); $i++) {
$key = key($pos);
$trecho = substr($textNormal, 0, $key + $charTrecho);
if (strlen($trecho) < $textLen) {
$trecho = substr($trecho, 0, strrpos($trecho, " ") + 1) . "...";
}
$tmp = substr($trecho, $pos[$key]["ini"], $pos[$key]["len"]);
$trecho = substr_replace($trecho, "" . $tmp . "", $pos[$key]["ini"], $pos[$key]["len"]);
$sair = false;
while ($sair == false) {
$trechoIni = $pos[$key]["ini"] - $charTrecho;
if ($trechoIni < 0) { $trechoIni = 0; }
if (next($pos) AND key($pos) > $trechoIni) {
$key = key($pos);
$tmp = substr($trecho, $pos[$key]["ini"], $pos[$key]["len"]);
$trecho = substr_replace($trecho, "" . $tmp . "", $pos[$key]["ini"], $pos[$key]["len"]);
$i++;
} else {
$tmp = substr($trecho, $trechoIni);
if ($trechoIni > 0) {
$tmp = "..." . strstr($tmp, " ");
}
$trechos[] = $tmp;
$sair = true;
}
}
}
if($pos==""){
return $trecho2;
}else{
return implode("
", $trechos);
}
}
echo textQuery($texto, "grifada");
?>