Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

L@nder

Criar link em um texto com palavras que constam no Banco de Dados

Recommended Posts

Pessoal estou a mais de um mês quebrando a cabeça para fazer com que o php crie um link em um texto com as palavras que constam no banco de dados.

 

É o seguinte: Tenho uma tabela no meu banco de dados chamada "palavras" cuja estrutura é a seguinte.

id nome

1 mesa

2 casa

3 meu

E uma variável $texto

$texto = "O meu casamento foi na minha casa";

O que eu quero é o seguinte. Preciso que o php liste no texto as palavras que constam no banco de dados e crie um link nesta palavra. No exemplo acima as palavras meu e casa.

Ficando assim:

O meu casamento foi na minha casa

Observe que nas palavra meu e casa foi criado um link, pois estas palavras constam no banco de dados.

Criei um array com as palavras do banco e outro com as palavras do texto. Utilizei a função str_replace porém ele marca a palavra casamento pois esta palavra contém a combinação das letras C A S A.

Eu preciso que o php só marque palavras completas, e todas as que constarem no banco de dados.

Já não sei mais o que fazer ou pesquisar... Se puderem me dar um passo a passo ficaria muito agradecido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor é usar regex

<?php
$string = 'O meu casamento foi na minha casa';
$words = array('mesa','casa','meu');

echo hl($string, $words);

function hl($inp, $words)
{
  $replace=array_flip(array_flip($words)); // remove duplicados
  $pattern=array();
  foreach ($replace as $k=>$fword) {
     $pattern[]='/\b(' . $fword . ')(?!>)\b/i';
     $replace[$k]='<a href="http://www.site.com.br/tags/$1" title="$1"><b>$1</b></a>';
  }
  return preg_replace($pattern, $replace, $inp);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Melhor é usar regex

<?php
$string = 'O meu casamento foi na minha casa';
$words = array('mesa','casa','meu');

echo hl($string, $words);

function hl($inp, $words)
{
  $replace=array_flip(array_flip($words)); // remove duplicados
  $pattern=array();
  foreach ($replace as $k=>$fword) {
     $pattern[]='/\b(' . $fword . ')(?!>)\b/i';
     $replace[$k]='<a href="http://www.site.com.br/tags/$1" title="$1"><b>$1</b></a>';
  }
  return preg_replace($pattern, $replace, $inp);
}

Exatamente isso que eu queria Williams. Me ajudou muito... Muito obrigado mesmo. Que papai do céu sempre te abençoe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.