Jump to content


Photo

Transformar Primeira Letra De Cada Palavra Em Maiuscula


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

#1 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 20/11/2007, 13:18

Pessoal,

Preciso de uma função que pegue minha String e converta-a para maiúscula somente as primeiras letras de cada palavra.

Por exemplo: ANASTÁCIO PEreiRa E SIlva

Gostaria que ficasse

Anastácio Pereira e Silva

Valew!

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/11/2007, 13:28

Primeiro strtolower(), depois ucwords(). ;)

Nunca deixe de ler o manual...

[]’s :DAté mais

#3 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 20/11/2007, 13:39

Valew Paulo!

#4 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 20/11/2007, 17:31

Pessoal,

Preciso de uma função que pegue minha String e converta-a para maiúscula somente as primeiras letras de cada palavra.

Por exemplo: ANASTÁCIO PEreiRa E SIlva

Gostaria que ficasse

Anastácio Pereira e Silva

Valew!



Neste teu exemplo, usando as funções que o Paulo citou... ficaria assim:

<?php

$string = ucwords(strtolower("ANASTÁCIO PEreiRa E SIlva"));

print $string;

?>

// saída -> AnastÁcio Pereira E Silva



Para resolver o problema de casos acentuados... utilize a função htmlentities()

<?php

$string = ucwords(strtolower(htmlentities("ANASTÁCIO PEreiRa E SIlva")));

print $string;

?>

// saída -> Anastácio Pereira E Silva


Ainda assim terá o problema do E

Acho que poderá fazer uma verificação em palavra por palavra e sempre que a palavra não for início de frase e não ter mais que 1 caracter manda um strtolower() apenas.

Isso é o que deve ser feito na lógica... agora uma forma para se fazer isso otimizada e sem gambiarra deixo para os mais entendidos.

(y)Até mais

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/11/2007, 20:42

Nope, lembre-se da setlocale()... :assobio:

[]’s :DAté mais

#6 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 21/11/2007, 12:43

Valew galera......muito bom!

#7 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 21/11/2007, 20:16

Nope, lembre-se da setlocale()... :assobio:

[]' :D



Ih... esqueci... hehehe

<?php

setlocale(LC_CTYPE, 'pt_BR');

$nome = ucwords(strtolower("ANASTÁCIO PEreiRa E SIlva"));

print $nome;

?>


// saída -> Anastácio Pereira E Silva

// pode se usar tbm a constante LC_ALL para abranger todas as categorias da função setlocale().


(y)

Mas para pegar ali o caso da conjunção "E" ... alguma dica mais lógica e diferente do que mencionei... ?

Acho que uma função que verifica a string e se conter palavras com um caracter apenas e que antes desta palavra tenha um espaço e depois desta palavra tenha espaço tbm... aplica o strtolower()

:|


--------------------------
EDITADO

Olha o POGzão que eu fiz... kkkkkkkkkkkkk para resolver o problema de conjunções solitárias :D

<?php

$loc = setlocale(LC_CTYPE, 'pt_BR');

$frase = "ANAstÁcio pereiRA E sIlva";

$palavras = str_word_count($frase, 1);
$count_palavras = str_word_count($frase);

for($i=0; $i < $count_palavras; $i++){

	$palavra = (strlen($palavras[$i]) > 1) ? (ucwords(strtolower($palavras[$i]))) : (strtolower($palavras[$i]));

	$nova_frase = ($i < $count_palavras) ? $palavra." " : $palavra;

	print $nova_frase;

}

?>



// Saída => Anastácio Pereira e Silva



Mas funcionou :D

para o propósito de listar nomes do banco de dados por exemplo... 100% POG funcional hehehehe

(y)Até mais

#8 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 21/11/2007, 22:35

Saca só... :P

<?php

function ucwords_improved($s, $e = array())
{
	return join(' ',
			   array_map(
				   create_function(
					   '$s',
					   'return (!in_array($s, ' . var_export($e, true) . ')) ? ucfirst($s) : $s;'
				   ),
				   explode(
					   ' ',
					   strtolower($s)
				   )
			   )
		   );
}

setlocale(LC_CTYPE, 'pt_BR');

print ucwords_improved('ANAstÁcio pereiRA E sIlva', array('e'));

?>
[]’s :DAté mais

#9 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 21/11/2007, 23:37

Sim Paulo... vou estudar a tua função... mas agora me veio algo em mente...

Não se sabe se a conjunção é a letra 'e' em específico... pode ser outra... apesar de eu não conseguir lembrar nem um nome com outra letra solitária que não seja 'e'...

Mas o que eu queria dizer é que surge o problema de que na maioria dos nomes pessoais nem sempre temos a conjunção 'e' e sim na maioria das vezes vemos algo como:

João Da Silva
Jose De Almeida
Fulano Dos Santos
etc...

Onde não se trata de uma palavra de uma letra só que seria fácil filtrar tanto com a tua função quanto com o que eu fiz ali em cima.

ou seja... complicou mais ainda...

(y)


----------------------------------------------------------------------------------------------

mas editando e pensando melhor... acho que tem uma forma melhor de fazer isso sem chance de erros e problemas...

Bom ... forçando um pouco minha cabeça não consegui achar nenhuma conjunção utilizada em nomes pessoais ( pelo menos os brasileiros ) que fossem diferentes de :

e de da das do dos

Então não seria tocar isso tudo dentro de um saco (array) e na hora de converter apenas conferir se uma das palvras da string é igual a do saco... caso seja strtolower apenas e caso não seja igual a nenhum dentro do array aplica a strtolower e ucwords

Acho que da mais caldo e abrange todos os casos em nomes pessoais...

(y)Até mais

#10 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 22/11/2007, 00:00

Yeap. A função é expansível, aquele vetor é mágico. :rolleyes:

print ucwords_improved('ANAstÁcio pereiRA E sIlva', array('da', 'das', 'de', 'do', 'dos', 'e'));
O "vetor mágico" poderia estar dentro da própria função. Optei por deixar externo devido a customização, não fica dependente a uma só linguagem... :rolleyes:

[]’s :DAté mais

#11 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 22/11/2007, 00:19

aeee... agora sim... fiquei sem palavras :lol:

(y) Até mais

#12 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 22/11/2007, 13:36

Saca só... :P

<?php  function ucwords_improved($s, $e = array()) {     return join(' ',                array_map(                    create_function(                        '$s',                        'return (!in_array($s, ' . var_export($e, true) . ')) ? ucfirst($s) : $s;'                    ),                    explode(                        ' ',                        strtolower($s)                    )                )            ); }  setlocale(LC_CTYPE, 'pt_BR');  print ucwords_improved('ANAstÁcio pereiRA E sIlva', array('e'));  ?>
[]’s :D


Recomendo postar esse código lá no banco de funções ... ela é de grande valia ;)

[]'s

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#13 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 22/11/2007, 17:26

Concordo...

nem o IPB tem uma função assim... tbm acho que seria difícil... mas até daria para colocar no array todas as conjunções, pois se for ver no IPB quando vc cria um tópico rola um UCFIRST tbm... mas bem precário causando essas indisponibilidades.

Essa função foi da hora sim...

Cutuquei cutuquei até o Paulo liberar o ouro kkkkkkkkkkk

Massa

(y) Até mais

#14 Henrique Zanini

Henrique Zanini

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:Santa Cecília, Santa Catarina, Brasil

Posted 23/09/2013, 21:49

Aqui deu problema com os acentos :(

Anast��cio Pereira e Silva

Aqui deu problema com os acentos :(

Anast��cio Pereira e Silva


Salvei com dreamweaver e deu esse erro. Salvei com o notepad++ e ficou "Anastácio Pereira e Silva".

Alguém sabe qual é o problema?

#15 Tiago Buzatto

Tiago Buzatto

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:São José dos Campos

Posted 09/02/2016, 04:03

Finalizando e juntando tudo e resolvendo o problema de acentuação:

 

<?php

function ucwords_improved($s, $e = array())
{
    return join(' ',
             array_map(
                 create_function(
                     '$s',
                     'return (!in_array($s, ' . var_export($e, true) . ')) ? ucfirst($s) : $s;'
                 ),
                 explode(
                     ' ',
                     strtolower($s)
                 )
             )
         );
}

setlocale(LC_CTYPE, 'pt_BR');

print ucwords_improved(htmlentities('ANAstÁcio pereiRA E sIlva'), array('da', 'das', 'de', 'do', 'dos', 'e'));

?>






3 user(s) are reading this topic

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

IPB Skin By Virteq