Postagens

Mostrando postagens de abril, 2013

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()

Encontrei uma dica muito interessante do "cutmaster at fearlesss dot com" que postou no site php.net. Ele mostrou como gerar um arquivo realmente no formato UTF-8. Segue a tradução de seu post. "Para aqueles que, como eu, gastaram muito tempo para entender porque fwrite() não criava arquivos utf-8 de verdade, aqui vai uma explicação que encontrei: Tentei fazer algo com:" <?php myString = utf8_encode("Test with accents éèàç"); fh=fopen('test.xml',"w"); write($fh,$myString); close($fh); "Por alguma razão misteriosa, o arquivo gerado traz os acentos sem o padrão utf-8. Tentei binário, etc. etc. e finalmente encontrei a solução. Parece que fwrite() PRECISA ter a função utf8_encode() DENTRO de seus parâmetros, como segue abaixo." <?php $myString = "Test with accents éèàç"; $fh=fopen('test.xml',"w"); fwrite($fh,utf8_encode($myString)); fclose($fh);

PHP - Enviando parâmetros para funções e métodos via Array

Quero propor hoje uma nova metodologia. Tenho testado ela em aplicações e tem sido bem interessante. A passagem de parâmetros via Array associativa  (pares de "chaves, valores"). Adianto que não necessariamente este é o melhor método que existe mas ele é bem prático se compararmos com a metodologia comum de passagem de parâmetros. O que é? Bem, não existe novidade alguma no aspecto técnico deste procedimento. Ele é mais uma metodologia de uso. Um grande problema da programação são as refatorações, ou seja, quando temos de implementar algo novo ou corrigir uma falha. Neste cenário está a passagem de parâmetros para uma função, método ou construtor de classe. Já aconteceu comigo várias vezes de ter de criar tantos parâmetros para um método que eles chegava a sumir da tela! E quando temos de colocar um novo? Devemos lembrar, é claro, que a sequência de parâmetros, ou seja, sua ordem na chamada, deve ser a mesma que na função ou método. E se trocamos esta ordem... coisa

PHP - REPL, teste códigos php assim como no console do FireFox ou Chrome

Imagem
Em minhas pesquisas semanais descobri algo muito interessante que quero dividir com vocês e que se chama REPL. Opa, mas o que é isto? O título deste post provavelmente já deu uma pista. REPL (Read-Eval-Print Loop) é um interpretador de linha de comando que executa seu código assim que você aperta o Enter. Se você já trabalhou com Javascript e já fez testes no painel de desenvolvedor do Chrome ou no FireBug do FireFox sabe bem do que estou falando. O PHP também possui um REPL. Para ativá-lo no Linux basta abrir um terminal e digitar: $php -a Deve aparecer em seu terminal o seguinte: php >  Isto indica que entramos no REPL do PHP. Podemos 'brincar' agora com o REPL. php > echo "Ola REPL"; Isto retorna: Ola REPL Um uso interessante do REPL é testar expressões regulares, que são bem chatas, e que sempre temos de testar bastante (pelo menos eu) para encontrar o melhor comportamento. php > echo preg_match('/[0-9]+/','Aqui tem

PHP - xml_encode(), função que converte uma array para XML semelhante ao json_encode()

A algum tempo estava precisando gerar dados no formato XML a partir de um banco de dados. Havia um sistema legado que gerava arquivos .html e tentei entender a lógica como um todo e... acabei desistindo. As páginas eram geradas através de preenchimento de Templates e, para XML, esta solução seria muito, muito complicada e chata. Comecei a criar uma classe específica para a geração dos XMLs diretamente do banco de dados e baseada em array, criando a estrutura do XML dentro desta array, assim como fazemos com a função json_encode(). Foi quando percebi que também seria difícil fazê-lo pois não existe uma função nativa no PHP semelhante a json_encode(). O que existe é a biblioteca SimpleXML mas mesmo esta não possuía nada que fosse prático para meu problema. Foi ai que pesquisei pela Web e encontrei no link abaixo uma solução muito interessante. http://darklaunch.com/2009/05/23/php-xml-encode-using-domdocument-convert-array-to-xml-json-encode Infelizmente esta solução não contempl

PHP - Utilizando ltrim e rtrim ao invés de substring ou regexp

O conjunto de funções trim() são interessantes não só em casos em que devemos retirar espaços vazios do inicio ou final de uma string, mas também quando precisamos retirar outros caracteres indesejados. Sim, trim() , rtrim() e ltrim() aceitam retirar outros caracteres além do espaço. Isto é interessante principalmente quando montamos listas através de um loop. No final sempre fica aquela virgula chata. <?php $lista = ""; for  ($i=0;$i<10;$i++)  { $lista .= "{$i},"; } echo $lista; O script acima produz 0,1,2,3,4,5,6,7,8,9, Ao invés de executarmos uma substring chata podemos simplesmente, por exemplo, retirar a vírgula do final da lista utilizando rtrim($lista,',') : <?php $lista = ""; for  ($i=0;$i<10;$i++)  { $lista .= "{$i},"; } echo rtrim($lista,','); O script acima produz 0,1,2,3,4,5,6,7,8,9 Abraço a todos.