FGF-College-Work / Forum

:beer: Espaço dedicado a discussões e tira dúvida sobre disciplinas e conteúdo tecnológico.
MIT License
13 stars 4 forks source link

Suporte UTF-8 para CodeIgniter #199

Open marcialwushu opened 4 years ago

marcialwushu commented 4 years ago

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 .

$config['charset'] = "UTF-8";

Configurar conexão com o banco de dados

$db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_unicode_ci";

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.


Phil Sturgeon

Artigo Original de 17 de agosto de 2009