Arquivo do mês de Dezembro, 2009

Solucionar os problemas de codificação de caracteres (Parte II – PHP)

Quinta-feira, 24 de Dezembro, 2009

Agora que já funciona correctamente a codificação de caracteres das páginas estáticas (ler “Parte I – Apache“), vamos às páginas dinâmicas PHP.

PHP tem o seu próprio método de codificação de caracteres que vem configurado por definição como ISO-8859-1. Mesmo usando um ficheiro/script em UTF-8 com a meta tag definida para UTF-8, vai sair caracteres esquisitos.

Vamos à prática. Abrimos Notepad e escrevemos o seguinte código html:

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">

<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Charset</title>
</head>

<body>
  <div>Exemplo simples de codificação de caracteres (charset)</div>
  <div>á é í ó ú à è ì ò ù ä ë ï ö ü ¡ ¿ ñ</div>
</body>
</html>

Gravámos o documento como charset.php e alteremos a opção “Codificação:” para UTF-8.

Subimos este ficheiro ao servidor e testamos (Requisitos: Apache + PHP).

Resultado:
Exemplo PHP ISO-8859-1

Se a extensão deste ficheiro fosse “.htm”, não havia problemas de codificação de caracteres porque se tratava de uma página estática.

Mas como a extensão deste ficheiro é “.php” então se trata de uma página dinâmica PHP. Isto quer dizer que todo código HTML desta página é gerado pelo intérprete de PHP e não pelo servidor Apache.

Como o intérprete de PHP vem configurado por defeito como ISO-8859-1, este vai ler o ficheiro (em UTF-8) com uma codificação de caracteres errada gerando caracteres esquisitos.
(mais…)

Solucionar os problemas de codificação de caracteres (Parte I – Apache)

Sexta-feira, 18 de Dezembro, 2009

Os problemas de codificação de caracteres (charset) são muito comuns e nos tempos de hoje ainda se vê muitas páginas com este tipo de problemas.

Em teoria para solucionar este tipo de problemas é bastante fácil Se trabalhamos com UTF-8, então todos os ficheiros e comunicações devem de se realizar com este tipo de codificação de caracteres.

No entanto, na prática isto é bem mais difícil de implementar e se perde muitas vezes horas tentando buscar boas soluções.

Apesar de ser um tema complexo, tentarei explicar da maneira mais simples algumas soluções que a mim me parecem interessantes e as melhores para solucionar este tipo de problemas.

No entanto, caso tenham dúvidas sobre alguma explicação ou queiram aportar as vossas soluções/ideias, podem sempre usar os comentários.
(mais…)

Analisar código PHP com uma simples classe

Sexta-feira, 11 de Dezembro, 2009

dBug é uma classe de PHP muito efectiva para ver o que se passa em determinadas fases de um script quando este está em desenvolvimento.

Com dBug podes ver de uma maneira limpa, ordenada e colorida o conteúdo de String’s, Array’s, Objectos, Base de dados e dados XML.

Outra característica é que se pode personalizar as cores simplesmente com uma folha de estilos CSS.

As tabelas criadas pelo dBug podem ser expandidas ou contraídas com um click.

Como usá-lo?
(mais…)

Filtrar array multi dimensional por valor em PHP

Sexta-feira, 4 de Dezembro, 2009

Uma das grandes lacunas em PHP é que não existe uma função nativa para filtrar um array multi dimensional por valor.

Analisemos o seguinte array:

$data = array(
  0 => array('id' => '1', 'name' => 'home', 'value' => 'setPointer', 'obs' => 'page'),
  1 => array('id' => '2', 'name' => 'width', 'value' => 255, 'obs' => 'layout'),
  2 => array('id' => '3', 'name' => 'heigt', 'value' => 324, 'obs' => 'layout'),
  3 => array('id' => '4', 'name' => 'color', 'value' => 'FF0000', 'obs' => 'page'),
  4 => array('id' => '5', 'name' => 'background', 'value' => '00FF00', 'obs' => 'page'),
  5 => array('id' => '6', 'name' => 'size', 'value' => 255, 'obs' => 'page'),
  6 => array('id' => '7', 'name' => 'position', 'value' => 324, 'obs' => 'layout'),
  7 => array('id' => '8', 'name' => 'left', 'value' => 32, 'obs' => 'layout'),
  8 => array('id' => '9', 'name' => 'top', 'value' => 32, 'obs' => 'layout'),
  9 => array('id' => '10', 'name' => 'right', 'value' => 32, 'obs' => 'page')
);

A partir deste array multi dimensional, desejo filtrar todos os elementos com a chave ‘value’ que tenham um valor igual a 32.

Como faço?
(mais…)