segunda-feira, 2 de julho de 2012

Funções MultiByte, acentuação no PHP para todos.

Tentando  converter dados de um formulário HTML em upper case para gravar em um banco MYSQL,
passei horas de muito aperto lidando strtoupper.

Com pesar descobri que os caracteres acentuados permaneciam da mesma forma, e assim conseguia algo do tipo:

transformação   ->  TRANSFORMAçãO (note o 'çã' minúsculo)

Procurando, cheguei à informação de que era necessário ajustar o local com  a função setlocale().

Outro tempo gasto, muitos testes e nada.

Por fim encontrei as Funções MultiByte, que consideram os caracteres acentuados em vários idiomas.

Dessa forma, podemos simplesmente escrever:


<?php

    $letras= 'á é í ó ú ç ã õ â ê ô ü à è ò';

    echo mb_strtoupper($letras,'utf-8');
 
 ?>

 Resultado:  Á É Í Ó Ú Ç Ã Õ Â Ê Ô Ü À È Ò

Estas funções diferem pelo sufixo mb_ no nome. Existe equivalente para muitas funções que trabalham com
strings.

Por exemplo:

    mb_strlen — Comprimento da string
    mb_strpos — Acha a POSIÇÃO da primeira ocorrência de uma string em outra
    mb_strrpos — Acha a posição da ultima ocorrência de uma string em outra
    mb_strstr — Acha a primeira OCORRÊNCIA de uma string em outra
    mb_strtolower — transforma uma string em minúsculas
    mb_strtoupper — Transforma em maiúsculas
    mb_substr — Pega uma parte da string
    mb_substr_count — Conta o numero de ocorrências de uma substring em uma string

Para uma lista mais abrangente olhe em Multibyte String Functions

Então atéa próxima.