Capturar informações em um string
Boa noite,
Eu to com um problema que não sei como resolver. Vo explica abaixo.
$string1 = "Jose d silva"
$string2 = "Eu tav andando na rua em encontrei o jose da silva";
O que eu quero com isso, eu queria negrita ou marca o nome jose da silva que esta na string2, para isso eu estaria usando a string1 como referencia.
Será que alguem tem alguma ideia de como eu possa resolver este problema?
Eu to com um problema que não sei como resolver. Vo explica abaixo.
$string1 = "Jose d silva"
$string2 = "Eu tav andando na rua em encontrei o jose da silva";
O que eu quero com isso, eu queria negrita ou marca o nome jose da silva que esta na string2, para isso eu estaria usando a string1 como referencia.
Será que alguem tem alguma ideia de como eu possa resolver este problema?
comentários (0)
suspender
Lista de Respostas:
23/02/2010 7:09pm
(~15 anos atrás)
(~15 anos atrás)
Uma forma simples é com str_replace:
<?php
$nome = 'abc';
$texto = 'Encontrei o abc na rua e o abc me chamou.';
echo destacar($texto, $nome);
function destacar($texto, $palavra, $tag = 'strong') {
$palavra_destaque = '<'.$tag.'>'.$palavra.'</'.$tag.'>';
return str_replace($palavra, $palavra_destaque, $texto);
}
24/02/2010 6:54pm
(~15 anos atrás)
(~15 anos atrás)
Dara rubens tudo certo, isso eu já fiz, soh que eu queria uma coisa mais precisa. Tipo eu tenho o Jose d Silva. E dentro de um texto eu tenho Jose da Silva. Eu queria marca o Jose da Silva que esta dentro do texto, usando o Jose d Silva como referencia.
24/02/2010 9:46pm
(~15 anos atrás)
(~15 anos atrás)
Hugo, neste caso você quer uma coisa MENOS precisa. Afinal, a alternativa que passei pega o texto exato, e o que você quer é que tenha uma certa "tolerência".
Não sei pra que você quer isso, mas se é extremamente necessário, uma alternativa é usar a função similar_text. Ela avalia a semelhança entre duas strings e devolve na forma de porcentagem e a quantidade de caracteres iguais.
Veja a referência em:
http://br.php.net/manual/pt_BR/function.similar-text.php
Para montar o script, já é um pouco mais trabalhoso. Uma alternativa é essa abaixo, mas já adiando que podem ter muitos bugs, já que é um trabalho delicado sobre a string.
Não sei pra que você quer isso, mas se é extremamente necessário, uma alternativa é usar a função similar_text. Ela avalia a semelhança entre duas strings e devolve na forma de porcentagem e a quantidade de caracteres iguais.
Veja a referência em:
http://br.php.net/manual/pt_BR/function.similar-text.php
Para montar o script, já é um pouco mais trabalhoso. Uma alternativa é essa abaixo, mas já adiando que podem ter muitos bugs, já que é um trabalho delicado sobre a string.
<?php
$nome = 'Jose d Silva';
$texto = 'Encontrei o Jose da Silva na rua e o Jose da Silva me chamou';
echo destacar($texto, $nome, 90);
exit(0);
/**
* Destaca uma palavra no texto de acordo com um grau de tolerancia
* @param string $texto Texto completo
* @param string $palavra Texto usado como base de busca
* @param float $tolerancia Grau de tolerancia de similaridade
* @param string $tag Nome da tag usada para destaque
* @return string Texto substituido
*/
function destacar($texto, $palavra, $tolerancia = 90, $tag = 'strong') {
$tamanho_palavra = strlen($palavra);
$tamanho_texto = strlen($texto);
$primeira_letra = $palavra[0];
$ultima_letra = $palavra[$tamanho_palavra - 1];
$texto_saida = '';
$pos = 0;
// Achar primeira letra
for ($pos = 0; $pos < $tamanho_texto; $pos++) {
if ($texto[$pos] != $primeira_letra) {
$texto_saida .= $texto[$pos];
continue;
}
$tamanho_substr = 0;
// Achar ultima letra
for ($i = $pos + 1; $i < $tamanho_texto; $i++) {
// Achou ultima letra
if ($texto[$i] != $ultima_letra) {
continue;
}
$tamanho = $i - $pos + 1;
// Tamanho ainda menor que o tamanho da palavra
if ($tamanho < $tamanho_palavra) {
$tamanho_substr = $tamanho;
// Tamanho igual ao tamanho da palavra
} elseif ($tamanho == $tamanho_palavra) {
$tamanho_substr = $tamanho;
break;
// Tamanho maior que o tamanho da palavra
} else {
// Se detectou um tamanho menor que a palavra
if ($tamanho_substr) {
// Obter tamanho mais proximo do tamanho da palavra ou o maior pedaco
$t_menor = abs($tamanho_palavra - $tamanho_substr);
$t_maior = abs($tamanho_palavra - $tamanho);
$tamanho_substr = $t_menor < $t_maior ? $tamanho_substr : $tamanho;
// Se nao detectou, usar o tamanho encontrado
} else {
$tamanho_substr = $tamanho;
}
break;
}
}
// Se achou a ultima letra
if ($tamanho_substr !== 0) {
$substr = substr($texto, $pos, $tamanho_substr);
} else {
$substr = substr($texto, $pos);
}
// Obter similaridade
similar_text($substr, $palavra, $porcentagem);
// Se a similaridade eh maior que a tolerancia
if ($porcentagem >= $tolerancia) {
$texto_saida .= '<'.$tag.'>'.$substr.'</'.$tag.'>';
$pos += $tamanho_substr - 1;
} else {
$texto_saida .= $texto[$pos];
}
}
return $texto_saida;
}