25/11/2013

aqui tinha apresentado um artigo sobre problemas que tinha tido com codificação de carateres. Mas a saga continua e sempre que tenho de fazer alguma aplicação em PHP que envolva strings com carateres dito especiais, ou com acentuação, e no Português há muitos, tenho sempre trabalho extra para manobrar as codificações.

No meu caso prático queria gerar um ficheiro com uma string para depois ser utilizado para criação automatica de contas utilizadores na Active Directory (AD). Claro que nos nomes com acentuação tive problemas.

Neste artigo, quero apresentar as dificulades que tive e como as ultrapassei. Acredito que isto para um programador experiente isto seja canja, mas como esta não é a minha área (ou seja, sou maçarico :P) tenho sempre alguma dificuldade.

O que eu pretendia era ter um ficheiro com uma string a gerar pelo PHP mais ou menos do seguinte género:

jose.silva;José Maria da Silva;grupo_AD;jose.silva@mail.pt;grupo;etc;etc

A dificuldade que tive foi que ao usar o ficheiro com esta string, para criação da conta o utilizador, iria ficar com carateres estranhos na letra com acentuação (é) no serviço de directório (AD).

Resolvi da seguinte forma:

1. Obrigar a string a ficar no formato que a AD entenda
html_entity_decode($string,0,'ISO-8859-15')

2. Gravar o ficheiro .txt com a string no formato ANSI.

O formato ANSI, também conhecido por Windows-1252 é essencialmente uma extensão ao ASCII.

Contudo o termo ANSI, pode não ser muito correto, pois atualmente existe uma norma que define estas codificações. A norma que corresponde ao ANSI é o ISO/IEC 8859. Existe ainda a ISO/IEC 8859-15 que utilizei no ponto 1, que não é mais que uma extensão da norma base para codificar novos carateres como é o caso do € (euro).



3 comentários:

Ricardo Gomes disse...

Sem experimentar não tenho a certeza, mas acho que se fores pelo UTF8 também de safas e tens maior garantia que não tens problemas com outros caracteres que não estejas á espera, como o umlaut (aqueles dois pontos por cima das letras).

Ricardo Gomes disse...

Sem experimentar não tenho a certeza, mas acho que se fores pelo UTF8 também de safas e tens maior garantia que não tens problemas com outros caracteres que não estejas á espera, como o umlaut (aqueles dois pontos por cima das letras).

Paulo Gomes disse...

Oi Ricardo.
Obrigado pelo teu comentário.

Eu tinha experimentado primeiro tudo em UTF8, e para espanto meu não funcionou! Os carateres na AD ficaram esquisitos!
Só funcionou bem, quando coloquei tudo (carateres e formato do ficheiro) em ISO-8859.

1ab