Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Possuo uma página com programação em PHP enela um banco de dados onde informações são colocadas em uma tabela tem ocorrido algo que não consigo descobrir o motivo.
Uma mesma palavra é inserida de forma diferente devido aos caracteres especiais, as vezes de form correta e outra vez errada.
ex:
Locomoção e outras vezes locomoÃ$Â@o;
Inteiriça e outras vezes Inteiri@$a;
Pedagógicos e outras vezes PedagÊ@gicos.
Não entendo porque as vezes é inserida de forma correta e outras não, se tem a ver om o navegador usado pela pessoa que acessa ou ...
coloquei no cabeçário <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">.
Agradeço a ajuda.
O banco de dados usa ISO 8859-1, qual ao SGBD desculpe a ignorância mas não sei o que significa.
SGBD:
http://pt.wikipedia.org/wiki/Sistema_de_ge..._banco_de_dados
Os arquivos (codificação do editor) estão em ISO também?
Os dados do banco de dados são os seguintes:
ost
* Versão do Servidor: 4.0.27-log
* Versão do Protocolo: 10
* Servidor: Localhost via UNIX socket
phpMyAdmin - 2.11.1.1
* Versão do cliente MySQL: 4.0.27
* Extensões PHP usadas: mysql
*
Linguagem - Language Info:
*
Tema / Estilo:
*
Tamanho da fonte:
* Documentação do phpMyAdmin
* Wiki phpMyAdmin
* Página Oficial do phpMyAdmin
* [ChangeLog] [subversion] [Lists]
Não sei se era isso q você queria saber.
não.
perguntei qual é a codificação dos arquivos. Isso é visto no editor de textos que está usando para escrever os scripts.
Geralmente deixo tudo em UTF-8. Isso nunca gerou problemas com caracteres especiais.
Eu utilizo o PHP Editor, mas não encontrei em nenhum lugar esta informação.
Use:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> em seu código HTML.
em sua base de dados, em collation, deixe:
latin1_swedish_ci na base de dados também.
depois adicione novos registros. estás inserindo dados via php/ajax ?
Cara não tenho acesso a estas informações, tenho o banco de dados no TERRA e entrei em contato com eles , porém, só me responderam que não é necessário anterar estas configurações. Informei que queria pelo menos saber quais eram e até hoje não me responderam.
Só recapitulando no banco de dados uma informaçãos entra de formas diferentes e não sei o porque. Abaixo exeplo:
00000010605 Acessórios p/Impressoras subcategoria NC menutopo lista_subcat_2 2009-04-06 09:36:03
00000010478 Acessórios p/Impressoras subcategoria NC menutopo lista_subcat_2 2009-04-05 22:39:42
Outras vezes, mais raro, ela some o espaço entre as palavras.
Não sei mais o que fazer.
Finalmente o terra respondeu PARCIALMENTE !!
"Em atenção ao seu e-mail, informamos que nosso servidor MySQL utiliza o padrão iso-8859-1."
Apesar te eu ter pedido as informações :
Qual o Conjunto de caracteres MySQL:
Qual o Collation de conexão do MySQL:
mortigas, as tabelas podem possuir collation independente do padrão do server.
e para ver as configs, basta executar a query
show variables
Valeu hinom !!!
Apliquei o comando e respondeu ..
character_set = latin1
character_sets = latin1 ujis sjis dec8 dos german1 hp8 koi8_ru latin...
Isso quer disser que os dois itens são latin1 ? (Conjunto de caracteres MySQL e Collation de conexão do MySQL)
Eu tenhio usado o comando <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> no inicio de cada página!
O que não entendo é porque as vezes sai correto e as vezes não ? será que depende do navegador usado ou da configuracão do mesmo?
isso é a spec do banco de dados
você precisa certificar-se de qual engine, charset e collation está usando as suas tabelas
verfiique também se os campos das tabelas possuem algum collation em especial
no MYSQL é possível fazer o seguinte
SERVER
charset LATIN1
TABLE
charset SHIFT_JIS
FIELD
charset UTF8
isso significa que
independente do server estar em latin1, e da taela estar em SHIFT_JIS, os dados para o campo FIELD, serão gravados em UTF-8
se você criou as tabelas sem especificar charset, entao ela assumirá o valor default que é do server "LATIN1"
Antes de mais nada quero agradecer hinom pela ajuda!
crei um script para realizar um teste que foi o seguinte
<?
$posi=15157; (e $posi=15135;)
$query = "SELECT * FROM contador WHERE cont_id = '$posi' ";
$resultado = mysql_query($query,$conexao);
while ($linha = mysql_fetch_array($resultado))
{
$cont_id5=$linha['cont_id'];
$str=$linha['cont_refe'];
}
$encoding = mb_detect_encoding($str, "UTF-8, ISO-8859-1");
echo "cont_id5= $cont_id5 -- str=$str -- encoding=$encoding" ?><BR><?;
?>
Que retornou o seguinte:
cont_id5= 00000015157 -- str=Blocos Lógicos -- encoding=ISO-8859-1
cont_id5= 00000015135 -- str=Blocos Lógicos -- encoding=UTF-8
Como pode se as duas inserções foram feitas com a mesma página e nela esta o coamando
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> ??
os registros foram inseridos por qual aplicativo ?
como estava a configuração do charset do aplicativo e do banco de dados no momento em que foram inseridos ?
"os registros foram inseridos por qual aplicativo ?
como estava a configuração do charset do aplicativo e do banco de dados no momento em que foram inseridos ? "
Não sei se é isso que queres saber mas foi inserido através de uma página gerada em PHP e esta foi criada no PHP EDITOR (ondejá procurei, sem sucesso, encontrar esta informção).
faça esse teste
http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/index.php?showtopic=340459
Cara
baixei o programa, realizei as alterações, criei os arquivos porém no mysql ao digitar os comandos
CREATE DATABASE charset_test;
USE charset_test;
CREATE TABLE `encoding` (
`id` int(4) NOT NULL auto_increment,
`text` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
retornou
Erro
consulta SQL:
CREATE DATABASE charset_test;
Mensagens do MySQL :
#1044 - Access denied for user: 'benga1@%' to database 'charset_test'
ZEBROU
1. possui um usuário com privilégios administrativos do mysql ?
2. executou o teste localmente ?
Acho que não pois no LOCALHOST esta escrito:
Versão do Servidor: 4.0.27-log
Versão do Protocolo: 10
Servidor: Localhost via UNIX socket
Usuário: benga1@localhost
Criar novo Banco de Dados: Sem privilégios
phpMyAdmin - 2.11.1.1
Versão do cliente MySQL: 4.0.27
Extensões PHP usadas: mysql
Este terra é uma meleca pois na Hostnet, onde controlo outra página, tenho acesso a tudo.
isso nao tem problema
nesse caso, não precisa criar uma base de dados
basta usar a base atual oferecida pelo seu host
portanto, o SQL ficaria assim
>
USE **AQUI_O_NOME_DA_SUA_BASE_DE_DADOS_SACOU?**;
CREATE TABLE `encoding` (
`id` int(4) NOT NULL auto_increment,
`text` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
o importante é que consiga criar essa tabela para realizar o teste.
modifique também nos arquivos php do teste, onde tiver escrito "charset_test" troque pelo nome da sua base de dados.
obs: faça o teste localmente também, não precisa depende de host, crie o seu ambiente de desenvolvimento local
Aparentemente resolvi o problema colocando a função abaixo:
function fix_string ( $string ) {
$pattern = array( 'ã', 'á', 'à ', 'â', 'Â', 'À', 'Ã<81>', 'Ã', 'Ê', 'È', 'É', 'ê', 'é', 'è', 'Ã<8d>', 'ÃŒ', 'Ĩ', 'ÃŽ', 'Ã', 'ì', 'î', 'Ä©', 'ô', 'õ', 'ó', 'ò', 'ô', 'Ô', 'Õ', 'Ó', 'Ó', 'û', 'ú', 'Å©', 'ù', 'u', 'Û', 'Ú', 'Ù', 'Ũ', 'ç', 'Ç', 'í³', 'í', 'í§', 'á' );
$replace = array( 'ã', 'á', 'à', 'â', 'Â', 'À', 'Á', 'Ã', 'Ê', 'È', 'É', 'ê', 'é', 'è', 'Í', 'Ì', 'I~', 'Î', 'í', 'ì', 'î', 'i~', 'ô', 'õ', 'ó', 'ò', 'ô', 'Ô', 'Õ', 'Ó', 'Ó', 'û', 'ú', 'u~', 'ù', 'u', 'Û', 'Ú', 'Ù', 'U~', 'ç', 'Ç', 'ó', 'Á', 'ç', 'á' );
return str_replace( $pattern, $replace, $string );
}
Não apareceram mais entradas incorretas, por enquanto, e já fazem 4 dias.
Valeu pela ajuda !!!!
Qual SGBD está usando e qual é a codificação daa tabela?
Mantenha tudo na mesma codificação, UTF-8, por exemplo. Tanto o banco, quanto a meta tag content-type e os arquivos (codificação do editor de textos)