Jump to content


Photo

Filtro De Palavras


  • Faça o login para participar
4 replies to this topic

#1 Beraldo

Beraldo

    Normal

  • Usuários
  • 100 posts
  • Sexo:Não informado
  • Localidade:Curitiba - PR
  • Interesses:Muitos...

Posted 04/01/2007, 09:21

Saudações, pessoal. :D

Tenho um filtro de palavras que funciona desta forma:

<?php
function Filtro($texto){
$filtro = array (
		  "vc" => "você",
		  "blz" => "beleza",
		  "tb" => "também"
		  );

foreach ($filtro as $errado => $certo){
	$texto = preg_replace ("/".$errado."/i", $certo, $texto);
}
return $texto;
}

$x = "Vc vc Blz blz Tb tb";
echo Filtro ($x);
?>
* O filtro possui várias palavras cadastradas num banco de dados. O código acima é uma forma mais simples do original.


O problema é que, se eu digitar "Vc", o filtro altera para "você" (com inicial minúscula). Isso ocorre com todas as palavras.

Há como eu exibir a primeira letra em maiúsculo se o usuário digitar a palavra com inicial maiúscula, sem precisar cadastrar todas as variações das palavras no banco de dados?

Não posso ficar cadastrando todas as variações, pois se a palavara original for ConsiÊNcia, a forma final deverá ser Consciência (com somente a inicial maiúscula).

Valeu
[]'s
Participe, apóie e divulgue: Eu Sei Escrever
Ajude a combater os spammers: Clique aqui - Spam Poison

Our world has got no borders
And in union we all stand
Heavy Metal is our promised land


#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 04/01/2007, 11:08

O que você pode fazer, é utilizar na modificação, a inicial da palavra escrita erradamente.

Ou seja:
$texto = preg_replace('/(' . $errado{0} . ')' . substr($errado, 1) . '/i', '$1' . substr($certo, 1), $texto);

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#3 Beraldo

Beraldo

    Normal

  • Usuários
  • 100 posts
  • Sexo:Não informado
  • Localidade:Curitiba - PR
  • Interesses:Muitos...

Posted 04/01/2007, 13:42

Opa, valeu. Deu certo.
Só queria entender o que significa e de onde vem essa variável $1, entre aspas no segundo argumento.

[]'s



[editdo 05/01/2006 19:08]

... tentei descobrir como isso funciona, mas ainda não entendi.
Uma variável iniciada por um número não deveria causar um erro?

[]'s
Beraldo
[/editado]

Edição feita por: Beraldo, 05/01/2007, 18:08.

Participe, apóie e divulgue: Eu Sei Escrever
Ajude a combater os spammers: Clique aqui - Spam Poison

Our world has got no borders
And in union we all stand
Heavy Metal is our promised land


#4 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 05/01/2007, 23:20

O $1 tem o valor do que casou no primeiro grupo da expressão regular, denominado assim como back reference.

Como foi colocado a inicial da palavra dentro do grupo, ou seja, dentro de parênteses. $1 pode ser usado no segundo argumento da função para indicar o seu valor.

$0 contém tudo que casou na expressão.
E para referenciar o que casou nos grupos, você tem de $1 à $9.
Sendo que nem sempre você precisa necessariamente ter referência para um grupo, quando isso ocorrer, você pode utilizar a sintaxe (?:pattern), ocultando assim sua referência.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#5 Beraldo

Beraldo

    Normal

  • Usuários
  • 100 posts
  • Sexo:Não informado
  • Localidade:Curitiba - PR
  • Interesses:Muitos...

Posted 06/01/2007, 13:15

Ah, saquei.
Eu havia lido isso com o nome de retrovisores, mas não sabia que "viravam" variáveis.

Valeu.
Abraço
Participe, apóie e divulgue: Eu Sei Escrever
Ajude a combater os spammers: Clique aqui - Spam Poison

Our world has got no borders
And in union we all stand
Heavy Metal is our promised land





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq