Transformar Primeira Letra De Cada Palavra Em Maiuscula
#1
Posted 20/11/2007, 13:18
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
Posted 20/11/2007, 13:28
#3
Posted 20/11/2007, 13:39
#4
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.
Até mais
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#5
Posted 20/11/2007, 20:42
[]s Até mais
#6
Posted 21/11/2007, 12:43
#7
Posted 21/11/2007, 20:16
Nope, lembre-se da setlocale()...
[]'
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().
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
<?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
para o propósito de listar nomes do banco de dados por exemplo... 100% POG funcional hehehehe
Até mais
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#8
Posted 21/11/2007, 22:35
<?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 Até mais
#9
Posted 21/11/2007, 23:37
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...
----------------------------------------------------------------------------------------------
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...
Até mais
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#10
Posted 22/11/2007, 00:00
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...
[]s Até mais
#11
Posted 22/11/2007, 00:19
Até mais
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#12
Posted 22/11/2007, 13:36
Saca só...
<?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
Recomendo postar esse código lá no banco de funções ... ela é de grande valia
[]'s
#13
Posted 22/11/2007, 17:26
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
Até mais
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#14
Posted 23/09/2013, 21:49
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
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'));
?>
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)