<?php
// autor: Carlos Sica
// PRImeira MAiscula = PRIMA
// licensa GPL

function prima($nome){
  $nome = trim($nome);
  // primeiro torna tudo minusculo cuidando das acentuadas
  for($char=0; $char<=strlen($nome); $char++){
    // se for letra maiscula acentuada transforma em minuscula acentuada
    if((ord($nome[$char]) >= 192) && (ord($nome[$char]) <= 223))
      $nome[$char] = chr(ord($nome[$char]) + 32);
  }
  // porque a funcao strtolower nao pega letras acentuadas
  $nome = explode(" ", strtolower($nome));
  foreach ($nome as &$valor) {
    // faz a primeira maiscula excluindo as palavras que ligam dois nomes
    if(($valor != "da") && ($valor != "das") && ($valor != "de") && ($valor != "do") && ($valor != "dos") && ($valor != "e"))
      $valor[0] = strtoupper($valor[0]);
    // coloca ponto de abreviacao quando a letra vier sozinha, excluindo a letra 'e' que liga dois nomes
    if((strlen($valor) == 1) && ($valor[0] != "e") && (ord($valor[0]) < 0) && (ord($valor[0]) > 9))
      $valor .= ".";
    // se a primeira letra for minuscula acentuada transforma em maiscula acentuada
    if((ord($valor[0]) >= 224) && (ord($valor[0] <= 255)))
      $valor[0] = chr(ord($valor[0]) - 32);
  }
  $nome = implode(" ", $nome);
  return $nome;
}
?>