Ir para conteúdo

POWERED BY:

Arquivado

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

pinoc

Palavra chave em negrito texto.

Recommended Posts

Boa noite.

Tenho o seguinte ambiente, um texto (string) e varias palavras chaves (array) compostas e não compostas, preciso verificar quais palavras chaves existem neste texto e colocar-las em negrito (<strong></strong>).

Porem a função que o antigo programador do sistema fez não esta funcionando.

Versão do PHP 5.9.39

Segue a função.

function palavras_chave($texto = '', $palavras = array())
{
    $result = array(
        'texto'     => $texto,
        'palavras'  => array(),
    );

    foreach ($palavras as $keyword)
    {
        $keyword = preg_quote(htmlentities($keyword, ENT_COMPAT, 'UTF-8'));
        $texto   = preg_replace(
            '/\p{L}*?'.$keyword.'\p{L}*/ui',
            '<strong>$0</strong>',
            $texto
        );

        //var_dump($texto);
        //die();
        //"<span style=\"background: #b94a48; border-radius: 3px; padding: 2px 4px;white-space:no-wrap; color:#fff\">$0</span>",

        preg_match('/\p{L}*?'.$keyword.'\p{L}*/ui', $texto, $matches);

        if ($matches[0])
        {
            $result['palavras'][] = $matches[0];
        }
        unset($matches);
    }
    $result['texto'] = $texto;
    return $result;
}

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está funcionando? Por quê? O que acontece? Dá erro? Qual?

Descreva sua dúvida.

Lembre-se de habilitar todas as exibições de erro, como mostrado neste tópico, na Orientação 2

Outra coisa, não existe PHP 5.9. Reveja a versão

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei essa função desta forma:


$texto = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris in faucibus mauris. Cras ligula lectus, hendrerit sit amet nulla vel, pellentesque pellentesque augue. Fusce ac tincidunt nunc, a imperdiet dolor.';
 
$palavras = [
    'Lorem',
    'sit amet',
    'Mauris',
];
 
var_dump(palavras_chave($texto, $palavras));

Resultado:

array(2) {
  'texto' =>
  string(295) "<strong>Lorem</strong> ipsum dolor <strong>sit amet</strong>, consectetur adipiscing elit. <strong>Mauris</strong> in faucibus <strong>mauris</strong>. Cras ligula lectus, hendrerit <strong>sit amet</strong> nulla vel, pellentesque pellentesque augue. Fusce ac tincidunt nunc, a imperdiet dolor."
  'palavras' =>
  array(3) {
    [0] =>
    string(5) "Lorem"
    [1] =>
    string(8) "sit amet"
    [2] =>
    string(6) "Mauris"
  }
}

Pelo que entendi, era esse o resultado esperado. Parece estar tudo ok.

Testei no php 5.6.26 e no 7.0.11

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.