Jump to content


Photo

Strtolower2()


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

#1 BEOC

BEOC

    Novato no fórum

  • Aguardando Liberação
  • 7 posts
  • Sexo:Masculino
  • Localidade:Piracaia

Posted 19/01/2006, 14:28

Título: strtolower2()
Descrição: Melhora a função strtolower.

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

Sintaxe: strtolower2 ( STR TEXTO )
Retorno: String
Descrição: Esta função eh uma versão da strtolower só que esta traduz os caracteres com acentos.
Bibliotecas: Nenhuma
Limitações: PHP 3.0+

Função:
<?php
function strtolower2($texto) {
  $palavra = "";
  $txt = strtolower($texto);
  $trocar['Á'] = 'á';
  $trocar['À'] = 'à';
  $trocar['Â'] = 'â';
  $trocar['Ã'] = 'ã';
  $trocar['Ä'] = 'ä';
  $trocar['É'] = 'é';
  $trocar['È'] = 'è';
  $trocar['Ê'] = 'ê';
  $trocar['Ë'] = 'ë';
  $trocar['Í'] = 'í';
  $trocar['Ì'] = 'ì';
  $trocar['Î'] = 'î';
  $trocar['Ï'] = 'ï';
  $trocar['Ó'] = 'ó';
  $trocar['Ò'] = 'ò';
  $trocar['Ô'] = 'ô';
  $trocar['Õ'] = 'õ';
  $trocar['Ö'] = 'ö';
  $trocar['Ú'] = 'ú';
  $trocar['Ù'] = 'ù';
  $trocar['Û'] = 'û';
  $trocar['Ü'] = 'ü';
  $trocar['Ç'] = 'ç';
  $trocar['Æ'] = 'æ';
   for($i=0; $i<=strlen($txt); $i++) {
   $a = substr($txt, $i, 1);
     if(array_key_exists("$a",$trocar)){
       $palavra .= $trocar[$a];
     }else{
       $palavra .= substr($txt, $i, 1);
     }
   }
  return $palavra;
}
print strtolower2("TËSTÀNÔ ÊSTÉ SCRÏPT");
?>

flw'ss

Edição feita por: BEOC, 19/01/2006, 14:29.

Perfil
-----------------------

Nome: Bruno Eduardo de Oliveira Constantino
Site: http://www.brunoeduardo.com.br
Email: bruno.constantino@gmail.com
MSN: agbrunoeduardo@hotmail.com
Skype: agencia.brunoeduardo

#2 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 20/01/2006, 11:50

Ae amigo simplifiquei um pouco + sua função que no entanto ta super legal (y)

<?
 function strtolower2($Texto) {
  $Array1 = array('à','á','â','ã','é','è','ê','ó','ò','ô','õ','ú','ù','û','ü','ä','ë','ï','ö','ç');
  $Array2 = array('À','Á','Â','Ã','É','È','Ê','Ó','Ò','Ô','Õ','Ú','Ù','Û','Ü','Ä','Ë','Ï','Ö','Ç');
  for ($X = 0; $X < count($Array1); $X++) {
   $Texto = str_replace($Array2[$X],$Array1[$X],$Texto);
  }
  return strtolower($Texto);
 } 

echo strtolower2("TËSTÀNÔ ÊSTÉ SCRÏPT");

?>

OBS: se eu esqueci de alguma letra que contenha acento e só adicionar no final ^^'

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#3 Paulo Freitas

Paulo Freitas

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

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

Posted 20/01/2006, 12:30

Pode ser otimizada mais ainda usando a idéia que usei em minha função RemoveChars() ... ^_^

PS: Tem acentuação demais (rs). Vejam em minha função os únicos que se aplicam à língua portuguesa. :D

[]’s :DAté mais

#4 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 20/01/2006, 17:11

nao intendi qual o problema do strtolower original.. alguem pode me explicar??

Flws...
:wacko: Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#5 paes

paes

    GustavoPaes.Net

  • Usuários
  • 1393 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:Rumo ao topo!

Posted 20/01/2006, 17:14

nao intendi qual o problema do strtolower original.. alguem pode me explicar??


A original não coloca em maiúsculo as letras acentuadas ;)

Até
Site: GustavoPaes.net

^ Rumo ao Topo ^

#6 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 20/01/2006, 17:32

nao coloca em maiúsculo?? entao teria q ser strtoupper não.... testei aqui e finciona normal..

tanto
echo strtoupper("cadê meu avião?");
quanto
echo strtolower("CADÊ MEU AVIÃO?");

funcionam normalmente sem perder acentos, til e coisas parecidas....

foi isso mesmo q intendi??

Flws...
:blink:Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#7 Paulo Freitas

Paulo Freitas

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

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

Posted 20/01/2006, 21:30

Depois do post do HellBurn que notei qual era o propósito da função. Em meu post anterior eu analisei apenas o código em si. Desde quando strtolower() não converte acentuação ? :unsure:

Não é bem isso que o manual diz, veja:

Note que os caracteres do alfabeto é determinado pelo local atual. Isto indica que no local padrão "C", caracteres como A com trema (ä) não serão convertidos.

A função funciona de acordo com o idioma operacional em uso (seja qual for ele). Este idioma pode ser alterado pelo PHP (inclusive), pela função setlocale(). ;)

Ou seja, se não converte acentos, é porquê o idioma atual não suporta acentos. (y)

[]’s :DAté mais

#8 paes

paes

    GustavoPaes.Net

  • Usuários
  • 1393 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:Rumo ao topo!

Posted 21/01/2006, 08:23

Ou seja, se não converte acentos, é porquê o idioma atual não suporta acentos...


Interessante saber ;)
Flw
Site: GustavoPaes.net

^ Rumo ao Topo ^

#9 Paulo Freitas

Paulo Freitas

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

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

Posted 21/01/2006, 10:23

Para exemplificar o que eu havia dito antes ...
<?php

setlocale(LC_CTYPE, 'C'); // C = padrão PHP
print strtolower('TESTE WEBFÓRUM');

?>
Tentei aplicar este teste aqui à outros idiomas além do português e padrão C, porém, sem sucesso. Talvez seja porquê estou rodando em Windows ... :huh:

A única função que consigo alterar o funcionamento pelo idioma aqui é a strftime(). Para Windows, uso como 2º parâmetro da função setlocale() as language strings definidas neste documento da Microsoft: Run-Time Library Reference - Language Strings. :)

Como aqui funciona a strftime(), vou mostrar como faço:
<?php

$languages = array('ptb', 'enu', 'ita', 'fra', 'esp'); // Estes códigos variam dependendo do SO

foreach ($languages as $language)
{
    setlocale(LC_TIME, $language);
    print strftime('%B') . '<br />';
}

?>
[]’s :DAté mais

#10 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 23/01/2006, 07:13

nao intendi qual o problema do strtolower original.. alguem pode me explicar??


A original não coloca em maiúsculo as letras acentuadas ;)

no caso seria em MINÚSCULO e não em MAIÚSCULO:P

Para exemplificar o que eu havia dito antes ...

<?php

setlocale(LC_CTYPE, 'C'); // C = padrão PHP
print strtolower('TESTE WEBFÓRUM');

?>

Tentei aplicar este teste aqui à outros idiomas além do português e padrão C, porém, sem sucesso. Talvez seja porquê estou rodando em Windows ... huh.gif

A única função que consigo alterar o funcionamento pelo idioma aqui é a strftime(). Para Windows, uso como 2º parâmetro da função setlocale() as language strings definidas neste documento da Microsoft: Run-Time Library Reference - Language Strings. smile.gif

Como aqui funciona a strftime(), vou mostrar como faço:
<?php

$languages = array('ptb', 'enu', 'ita', 'fra', 'esp'); // Estes códigos variam dependendo do SO

foreach ($languages as $language)
{
   setlocale(LC_TIME, $language);
   print strftime('%B') . '<br />';
}

?>

[]’s biggrin.gif


Não sei se utilizei corretamente este script que vc mostrou vidaloka , mas tbm não funcionou no Kurumin :(

estranho ou e eu fazendo mierda ?:P

A função funciona de acordo com o idioma operacional em uso (seja qual for ele). Este idioma pode ser alterado pelo PHP (inclusive), pela função setlocale(). wink.gif


No meu caso, utilizo LINUX ( Kurumin brasileiro ) e não converteu os caracteres com acento em minúscula.

no Ruindows ( 2000 ) aconteceu a mesma coisa...

Edição feita por: Goku Jr, 23/01/2006, 07:21.

-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#11 Paulo Freitas

Paulo Freitas

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

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

Posted 23/01/2006, 08:18

no caso seria em MINÚSCULO e não em MAIÚSCULO:P

Ops, empolgação ... :P

Não sei se utilizei corretamente este script que vc mostrou vidaloka , mas tbm não funcionou no Kurumin :(

estranho ou e eu fazendo mierda ?:P

Deve ser pelo fato de que os language codes usados pelo Kurumin serem diferentes. :D Acho que o Kurumin usa as language codes definidos pelo ISO 639, dê uma conferida aí ... ;)

No meu caso, utilizo LINUX ( Kurumin brasileiro ) e não converteu os caracteres com acento em minúscula.

no Ruindows ( 2000 ) aconteceu a mesma coisa...

He He He ... aqui rodando o PHP 5.1.2 sob o Apache 2.0.55 no Windows XP PRO SP2, ela converte os acentos automaticamente. :rolleyes:

[]’s :DAté mais

#12 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 23/01/2006, 08:44

no caso seria em MINÚSCULO e não em MAIÚSCULO:P

Ops, empolgação ... :P

Não sei se utilizei corretamente este script que vc mostrou vidaloka , mas tbm não funcionou no Kurumin :(

estranho ou e eu fazendo mierda ?:P

Deve ser pelo fato de que os language codes usados pelo Kurumin serem diferentes. :D Acho que o Kurumin usa as language codes definidos pelo ISO 639, dê uma conferida aí ... ;)

No meu caso, utilizo LINUX ( Kurumin brasileiro ) e não converteu os caracteres com acento em minúscula.

no Ruindows ( 2000 ) aconteceu a mesma coisa...

He He He ... aqui rodando o PHP 5.1.2 sob o Apache 2.0.55 no Windows XP PRO SP2, ela converte os acentos automaticamente. :rolleyes:

[]’s :D

heheh então, sendo assim quem tiver um RUINDOWS inferior ou até mesmo um LINUX "kurumin" ( vou testar no ubutun, connectiva 10 e no red hat 9 pra ver se acontece o mesmo ) fica sem solução ?( digo terás mesmo que usar o strtolower2 ?

ah eu uso o Apache 1.3 + PHP4.4.0 no Kurumin Brazuca

até q vai servir pra alguma coisa está função :lol:

ou nem :wacko:

hehehe Vlw Vidaloka pelos estudos e obs!
acho q apartir disso fica a critério de nós programadores para sabermos a melhor forma para nossos scripts...

T+ (y) !

Edição feita por: Goku Jr, 23/01/2006, 08:48.

-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#13 Paulo Freitas

Paulo Freitas

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

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

Posted 23/01/2006, 09:23

heheh então, sendo assim quem tiver um RUINDOWS inferior ou até mesmo um LINUX "kurumin" ( vou testar no ubutun, connectiva 10  e no red hat 9 pra ver se acontece o mesmo ) fica sem solução ?( digo terás mesmo que usar o strtolower2 ?

De maneira alguma :D ... como eu havia dito antes, cada SO trabalha com uma nomenclatura diferente. No meu código eu usei uma (nomenclatura) exclusiva para sistemas Windows (98, Me, NT, 2000, XP), que se encontra aqui: Run-Time Library Reference - Language Strings. Se não me engano sistemas Windows também aceitam o padrão ISO 3166. ;)

Qualquer dúvida, dê uma olhada no que diz o manual à respeito da função setlocale(). (y)

[]’s :DAté mais

#14 BEOC

BEOC

    Novato no fórum

  • Aguardando Liberação
  • 7 posts
  • Sexo:Masculino
  • Localidade:Piracaia

Posted 24/01/2006, 13:38

bom pessoal, eu uso mto esta função, pq além dela incrementar a strtolower eh mais confiável de se usar em outros sistemas.



flw'ss
Perfil
-----------------------

Nome: Bruno Eduardo de Oliveira Constantino
Site: http://www.brunoeduardo.com.br
Email: bruno.constantino@gmail.com
MSN: agbrunoeduardo@hotmail.com
Skype: agencia.brunoeduardo

#15 Paulo Freitas

Paulo Freitas

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

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

Posted 24/01/2006, 15:28

bom pessoal, eu uso mto esta função, pq além dela incrementar a strtolower eh mais confiável de se usar em outros sistemas.



flw'ss

Sinto muito, mas tenho que discordar de você. Até onde sei, a função strtolower() é muito mais incrementada que a sua, pois ela é sensível ao idioma. Ou seja, ela inverte muitos outros caracteres. Além de ser binary-safe. (y)

Quanto à sua ser mais confiável, também não vejo motivos, aliás, até hoje não vi uma função semelhante à função interna do PHP ser mais confiável que a mesma. A função interna strtolower() do PHP, existe desde a versão 3, e está em constante otimização. Além do mais, ela possui verificação de parâmetro.

E para finalizar, resolvi fazer um benchmark entre ambas, para análise. Para isso, passei como parâmetro de ambas, um arquivo (o changelog do PHP) de singelos 75 KB, que foi o suficiente para nos reportar isto:
strtolower()  = 0.076345920562744 seconds
strtolower2() = 3.3457169532776 seconds
Isto com 75 KB. Imagina um texto maior ... :unsure:

PS: Não leve isto como crítica, afinal, não é esta a minha intenção. A minha intenção foi lhe passar apenas dicas construtivas. ;)

[]’s :DAté mais




1 user(s) are reading this topic

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

IPB Skin By Virteq