Ir para conteúdo

POWERED BY:

Arquivado

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

visitante_xp

[Resolvido] Colorir parte de uma determinada string

Recommended Posts

Iae povo. Tem como eu deixar por exemplo bold em uma parte da string. Eu tentei o strtr(); mas num consegui.

 

Se alguem souber como faz e puder ajudar?

 

Abraço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

$str = 'Uma string qualquer com bold em algumas partes.';

$palavras = array( 'bold' , 'partes' );

$str = preg_replace( sprintf( '/(\b%s\B)/i' , implode( '\b|\b' , $palavras ) ) , '<b>$1</b>' , $str );

echo $str;

 

Saída:

Uma string qualquer com <b>bold</b> em algumas <b>partes</b>.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, tem N possibilidades:

 

A mais feia, na minha opinião, é:

 

$contexto = 'texto a ser negritado. teste comum';

$contexto = str_replace( 'texto a ser negritado', '<strong>texto a ser negritado</strong>', $contexto );

 

Um pouco melhor:

 

$contexto = 'texto a ser negritado. teste comum';

$contexto = preg_replace( '/(texto a ser negritado)/', '<strong>\\1</strong>', $contexto );

 

Qual a diferença?

 

A diferença é que pelo segundo modo usamos expressões regulares e com, por exemplo, um array mais um implode você pode especificar mais de um texto a ser procurado, o que não pode (ou deve ser bem difícil de) ser feito com str_replace

 

Com as ER's você pode procurar por, por exemplo:

 

- Todas ocorrências de texto

- Todas ocorrências de texto que sucedam ou precedam teste.

- Todas ocorrências de texto dos começos ou finais de linha.

 

E por aí vai.

 

[EDIT]

 

Rá, demorei tanto praescrever que o João veio na frente.

 

Mas o fato de ter pego apenas a primeira ocorrência é que é exatamente isso que preg_match() faz. Não existe nativamente (eu acho) um preg_replace_all(), assim como há preg_match_all().

 

Então, você monta a sua própria:

 

function preg_replace_all( $regexp, $replace, $target ) {
   while( preg_match( $regexp, $target ) ) {
       $target = preg_replace( $regexp, $replace, $target );
   }

   return $target;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummmm,

 

Postei o \b minúsculo e ele cresceu (ficou B , mas, enfim, são dois \b minúsculos

 

$str = 'Uma string qualquer com bold em algumas partes.';

$palavras = array( 'bold' , 'partes' );

$str = preg_replace( sprintf( '/(\b%s\B)/i' , implode( '\b|\b' , $palavras ) ) , '<b>$1</b>' , $str );

echo $str;

 

Saída:

Uma string qualquer com <b>bold</b> em algumas <b>partes</b>.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cresceu de novo :P

 

Por que não tirar os \b do grupo também:

 

$str = preg_replace( sprintf( '/\b(%s)\b/i' , implode( '\b|\b' , $palavras ) ) , '<b>$1</b>' , $str );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cresceu de novo

 

Então, deve ser alguma coisa com o sistema...

 

Por que não tirar os \b do grupo também:

 

Os \b minúsculos devem ficar dentro do grupo para permitir que várias palavras sejam utilizadas na matriz $palavras, por exemplo:

 

 $palavras = array( 'um' , 'dois' , 'três' ); 

 

Depois do implode, ficará assim:

 

/(\bum\b|\bdois\b|\btrês\b )/i

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu tirei e deu na mesma <_<

 

$palavras = array( 'bold' , 'partes', 'uma' );

$str = preg_replace( sprintf( '/\b(%s)\b/i' , implode( '\b|\b' , $palavras ) ) , '<b>$1</b>' , $str );

 

Saída:

 

<b>Uma</b> string qualquer com <b>bold</b> em algumas <b>partes</b>.
:huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, "funcionou". Mas no caso do implode, ele só aceita array. Preciso que faça a coloração de apenas uma paravra. Sua função funciona tmb @João.

 

Abs...

 

Consegui resolver... Com um pequeno POG mas deu certo.

 

Obrigado pela atenção de vocês...

 

Abraço!!!

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.