Escrever um aplicativo é fácil. Escrevendo um aplicativo que suporta todos os caracteres de vários idiomas? Não tão fácil.
O principal problema vem do caminho de volta, quando o idioma principal da computação era o inglês. Os caracteres ASCII receberam números de 1 a 128 az, AZ, 0-9 e pontuação. Isso é bom para o idioma inglês, mas praticamente todos os outros idiomas têm caracteres que não se encaixam nele. Para resolver isso, temos o UTF-8, que pode armazenar caracteres extras como vários bits e é compatível com o ASCII.
Para fazer com que seu aplicativo CodeIgniter funcione bem com o UTF-8, você deve pensar em algumas coisas.
Defina o cabeçalho HTTP em index.php
Todas as solicitações ao CodeIgniter são feitas através do arquivo index.php, que por padrão fica fora da pasta / sistema. Por esse motivo, é o local perfeito para adicionar um cabeçalho PHP para mim.
header('Content-Type: text/html; charset=utf-8');
Diga ao CodeIgniter o que está acontecendo
O CodeIgniter, por padrão, está configurado para usar UTF-8 para grande parte de sua funcionalidade interna, portanto, verifique se o conjunto de caracteres está definido como UTF-8 no arquivo application/config /config.php .
O padrão aqui é normalmente utf8_general_ci, o que é bastante fraco para o Unicode. Esta é uma citação do StackOverflow que, na minha opinião, explica muito bem as coisas.
"utf8_unicode_ci geralmente é mais preciso para todos os scripts. Por exemplo, no bloco cirílico: utf8_unicode_ci é adequado para todos os seguintes idiomas: russo, búlgaro, bielorrusso, macedônio, sérvio e ucraniano. Enquanto utf8_general_ci é adequado apenas para o subconjunto russo e búlgaro de cirílico As letras extras usadas em bielorrusso, macedônio, sérvio e ucraniano não estão bem classificadas. " ### Configure ou converta seu MySQL
Para que isso funcione, você precisa usar o MySQL 4.1 (ou superior) com o suporte ao utf8 ativado, mas isso é bastante padrão para a maioria dos hosts da web.
CREATE DATABASE example CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT COLLATE utf8_unicode_ci;
Se você já possui o banco de dados configurado e em execução, pode usar o código a seguir para converter o banco de dados em UTF-8.
ALTER DATABASE example CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT COLLATE utf8_unicode_ci;
Agora, o banco de dados está pronto, você precisa adicionar algumas tabelas.
CREATE TABLE blog ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', body TEXT COLLATE utf8_unicode_ci NOT NULL DEFAULT '',) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Como no banco de dados, se suas tabelas já existirem, você poderá usar o código a seguir para converter seus dados. Você pode obter resultados bastante estranhos se estiver cheio de dados em outro conjunto de caracteres que não seja o inglês, mas no geral isso nunca foi um problema para mim. ALTER TABLE blog (id INT (11) NÃO ASSINADO NULL AUTO_INCREMENT, título VARCHAR (100) COLLATE utf8_unicode_ci NÃO NULL DEFAULT '', corpo TEXT COLLATE utf8_unicode_ci NÃO NULL DEFAULT '',) DEFAULT CHARSET = utf8 COLLATE = utf8 COLLATE = utf8 COLLATE = utf8 COLLATE = utf8 COLLATE
E, finalmente, configure seus metadados.
O último local a ser configurado para suporte a UTF-8 está no seu HTML na tag
. Você pode usar a função meta () do CodeIgniter no auxiliar HTML ou no HTML simples. <html> <head> </head>
Eu usei o item de configuração em vez de apenas colocar o UTF-8, pois faz mais sentido do ponto de vista da programação. Se, por qualquer motivo, seu conjunto de caracteres for alterado no futuro, esse é um local a menos para alterá-lo.
Agora que seu aplicativo CodeIgniter está pronto, é necessário garantir que a GUI do banco de dados também esteja. Uso regularmente o Navicat e o phpMyAdmin e, em ambos, você pode definir o "agrupamento de conexões MySQL", portanto, certifique-se de que também esteja definido como "utf8_unicode_ci" ou poderá mostrar caracteres incorretos e provavelmente corromperá os seus dados enquanto você trabalha nele.
Para obter mais ajuda no desenvolvimento do UTF-8, consulte " Manuseando o UTF-8 com PHP ", que explica alguns dos problemas do uso das funções normais de string nas strings UTF-8 e, em seguida, veja as " Funções de String Multibyte do PHP" "páginas de manual para aprender a lidar com seus novos dados UTF-8 armazenados com felicidade.
Escrever um aplicativo é fácil. Escrevendo um aplicativo que suporta todos os caracteres de vários idiomas? Não tão fácil.
O principal problema vem do caminho de volta, quando o idioma principal da computação era o inglês. Os caracteres ASCII receberam números de 1 a 128 az, AZ, 0-9 e pontuação. Isso é bom para o idioma inglês, mas praticamente todos os outros idiomas têm caracteres que não se encaixam nele. Para resolver isso, temos o UTF-8, que pode armazenar caracteres extras como vários bits e é compatível com o ASCII.
Para fazer com que seu aplicativo CodeIgniter funcione bem com o UTF-8, você deve pensar em algumas coisas.
Defina o cabeçalho HTTP em index.php
Todas as solicitações ao CodeIgniter são feitas através do arquivo index.php, que por padrão fica fora da pasta / sistema. Por esse motivo, é o local perfeito para adicionar um cabeçalho PHP para mim.
Diga ao CodeIgniter o que está acontecendo
O CodeIgniter, por padrão, está configurado para usar UTF-8 para grande parte de sua funcionalidade interna, portanto, verifique se o conjunto de caracteres está definido como UTF-8 no arquivo application/config /config.php .
Configurar conexão com o banco de dados
O padrão aqui é normalmente utf8_general_ci, o que é bastante fraco para o Unicode. Esta é uma citação do StackOverflow que, na minha opinião, explica muito bem as coisas.
Para que isso funcione, você precisa usar o MySQL 4.1 (ou superior) com o suporte ao utf8 ativado, mas isso é bastante padrão para a maioria dos hosts da web.
Se você já possui o banco de dados configurado e em execução, pode usar o código a seguir para converter o banco de dados em UTF-8.
Agora, o banco de dados está pronto, você precisa adicionar algumas tabelas.
CREATE TABLE blog ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', body TEXT COLLATE utf8_unicode_ci NOT NULL DEFAULT '',) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Como no banco de dados, se suas tabelas já existirem, você poderá usar o código a seguir para converter seus dados. Você pode obter resultados bastante estranhos se estiver cheio de dados em outro conjunto de caracteres que não seja o inglês, mas no geral isso nunca foi um problema para mim.ALTER TABLE blog (id INT (11) NÃO ASSINADO NULL AUTO_INCREMENT, título VARCHAR (100) COLLATE utf8_unicode_ci NÃO NULL DEFAULT '', corpo TEXT COLLATE utf8_unicode_ci NÃO NULL DEFAULT '',) DEFAULT CHARSET = utf8 COLLATE = utf8 COLLATE = utf8 COLLATE = utf8 COLLATE = utf8 COLLATE
E, finalmente, configure seus metadados.
O último local a ser configurado para suporte a UTF-8 está no seu HTML na tag
. Você pode usar a função meta () do CodeIgniter no auxiliar HTML ou no HTML simples.<html> <head> </head>
Eu usei o item de configuração em vez de apenas colocar o UTF-8, pois faz mais sentido do ponto de vista da programação. Se, por qualquer motivo, seu conjunto de caracteres for alterado no futuro, esse é um local a menos para alterá-lo.
Agora que seu aplicativo CodeIgniter está pronto, é necessário garantir que a GUI do banco de dados também esteja. Uso regularmente o Navicat e o phpMyAdmin e, em ambos, você pode definir o "agrupamento de conexões MySQL", portanto, certifique-se de que também esteja definido como "utf8_unicode_ci" ou poderá mostrar caracteres incorretos e provavelmente corromperá os seus dados enquanto você trabalha nele.
Para obter mais ajuda no desenvolvimento do UTF-8, consulte " Manuseando o UTF-8 com PHP ", que explica alguns dos problemas do uso das funções normais de string nas strings UTF-8 e, em seguida, veja as " Funções de String Multibyte do PHP" "páginas de manual para aprender a lidar com seus novos dados UTF-8 armazenados com felicidade.
Phil Sturgeon
Artigo Original de 17 de agosto de 2009