Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
bom dia pessoal.
estou com problema de acentuação em meu codigo.
na verdade esse codigo le um xml e grava no banco, so que acentuação esta gravando tudo errado:
Escritório Mensalista
e no xml esta certinho com os acento, veja o codigo abaixo:
>
<?php
include"../includes/conecta.php";
$diretorio = "xml/";
$upload = $diretorio.$_FILES['xml']['name'];
$xml = $_FILES['xml']['name'];
if(move_uploaded_file($_FILES['xml']['tmp_name'], $upload))
{
$sql_nfe = mysql_query("insert into xml (nome) VALUES ('$xml')", $db);
$idimp = mysql_insert_id();
$sql_puxa_nfe = mysql_query("select * from xml where id = '$idimp'", $db);
$vetor = mysql_fetch_array($sql_puxa_nfe);
$numeronota = $vetor[nome];
$xml = simplexml_load_file( 'xml/' . $numeronota );
foreach($xml->channel->item as $item)
{
$codigo = $item->codigo;
$folha_mensal = $item->folha_mensal;
$cc = $item->cc;
$funcao = $item->funcao;
$nome_func = $item->nome_func;
$cbo = $item->cbo;
$departamento = $item->departamento;
$filial = $item->filial;
$admissao = $item->admissao;
$cod_atividades = $item->cod_atividades;
$desc_atividades = $item->desc_atividades;
$ref_atividades = $item->ref_atividades;
$vencimentos = $item->vencimentos;
$descontos = $item->descontos;
$total_descontos = $item->total_descontos;
$total_vencimento = $item->total_vencimento;
$salario_base = $item->salario_base;
$sal_contr_inss = $item->sal_contr_inss;
$base_calc_fgts = $item->base_calc_fgts;
$gts_mes = $item->gts_mes;
$base_calc_irrf = $item->base_calc_irrf;
$faixa_irrf = $item->faixa_irrf;
$valor_liquido = $item->valor_liquido;
$login_ou_matricula = $item->login_ou_matricula;
$sql_busca = mysql_query("select * from funcionario where matricula = '$login_ou_matricula'", $db);
$vetor = mysql_fetch_array($sql_busca);
if(mysql_num_rows($sql_busca) > 0){
$sql_busca1 = mysql_query("select * from folha where folha = '$folha_mensal'", $db);
$vetor1 = mysql_fetch_array($sql_busca1);
if(mysql_num_rows($sql_busca1) > 0){
echo"Holerite já Cadastrado";
echo "</br>";
}else{
$sql = mysql_query("insert into folha (codigo, folha, empresa, funcao, nome, cbo, departamento, filial, admissao, cod_atividade, desc_atividade, ref_atividades, vencimentos, descontos, total_descontos, total_vencimentos, salario_base, sal_contr_inss, base_calc_fgts, gts_mes, base_calc_irrf, faixa_irrf, valor_liquido, matricula) VALUES ('$codigo', '$folha_mensal', '$cc', '$funcao', '$nome_func', '$cbo', '$departamento', '$filial', '$admissao', '$cod_atividades', '$desc_atividades', '$ref_atividades', '$vencimentos', '$descontos', '$total_descontos', '$total_vencimento', '$salario_base', '$sal_contr_inss', '$base_calc_fgts', '$gts_mes', '$base_calc_irrf', '$faixa_irrf', '$valor_liquido', '$login_ou_matricula')", $db);
echo"Holerite de ".$nome;
echo" Cadastrado com sucesso";
echo "</br>";
}
} else {
$sql_funcionario = mysql_query("insert into funcionario (codigo_empresa, nome, matricula, senha, ativo) VALUES ('$codigo', '$nome_func', '$login_ou_matricula', '$login_ou_matricula', '2')", $db);
$sql_busca1 = mysql_query("select * from folha where folha = '$folha_mensal'", $db);
$vetor1 = mysql_fetch_array($sql_busca1);
if(mysql_num_rows($sql_busca1) > 0){
echo"Holerite já Cadastrado";
echo "</br>";
}else{
$sql = mysql_query("insert into folha (codigo, folha, empresa, funcao, nome, cbo, departamento, filial, admissao, cod_atividade, desc_atividade, ref_atividades, vencimentos, descontos, total_descontos, total_vencimentos, salario_base, sal_contr_inss, base_calc_fgts, gts_mes, base_calc_irrf, faixa_irrf, valor_liquido, matricula) VALUES ('$codigo', '$folha_mensal', '$cc', '$funcao', '$nome_func', '$cbo', '$departamento', '$filial', '$admissao', '$cod_atividades', '$desc_atividades', '$ref_atividades', '$vencimentos', '$descontos', '$total_descontos', '$total_vencimento', '$salario_base', '$sal_contr_inss', '$base_calc_fgts', '$gts_mes', '$base_calc_irrf', '$faixa_irrf', '$valor_liquido', '$login_ou_matricula')", $db);
echo"Holerite de ".$nome_func;
echo" Cadastrado com sucesso";
echo "</br>";
}
}
}
}
?>eu teria que codificar cada variavel?
É uma das alternativas existe tambem a opção de mudar a codifição de caracteres da pagina.
Este artigo pode le ajudar com uma das soluções
http://rubsphp.blogspot.com.br/2011/07/problemas-dom-charset-nunca-mais.html
lendo, vi que o xml vem com o seguinte padrão:
<?xml version="1.0" encoding="Windows-1252"?>
e possivel ao exportar ele mudar para o:
>
<xml version="1.0" encoding="UTF-8" ?>
ou simplesmente decodificar para o padrão do banco?
porque colocando apenas no codigo:
header('Content-Type: text/html; charset=UTF-8');
não funciona
Como está o charset de sua página de exibição ? utf8 ou iso ?
Use o echo utf8_encode($string);
Comigo sempre funciona perfeitamente. :)
Alaerte minha pagina que recebe so é o codigo php.
nao tem html, so um echo para mostrar os registros.
testei assim:
echo utf8_encode($cc);
e mesmo assim veio com a parte de acentuação errada.
Escritório Mensalista
Assim para fica mais facil de le ajudar, poste como esta a codificão de caractere do seu banco de dados,pagina php e do arquivo xml.
Utilize sempre o UTF-8
codificação do banco: latin1_general_ci
a codificação do xml ta:
<?xml version="1.0" encoding="Windows-1252"?>
e o php coloquei o UTF-8
Vish cara assim da uma organizada ai e coloca tudo como UTF-8.
no banco ja mudei aqui para utf8_general_ci, agora a questão do xml é que ele vem de outro programa e nao e eu que gero, o que posso fazer?
Nesse caso você pode usar utf8_encode, caso a codificação de sua pagina não estiver como UTF-8 coloque.
HTML 4
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
HTML 5
<meta charset="UTF-8" >
coloca isso na conexão
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
no index coloca assim
<?php ini_set('default_charset','UTF-8');?>
no mysql coloca tudo utf8_unicode_ci
perdao apenas hj voltei.
vonzuben sua sugestão funcionou perfeitamente, vlw
Na verdade o problema em si é que no seu xml você trabalha com uma codificação de caracteres o no banco de dados outra e no caso na hora de seu insert o banco de dados esta convertendo para o padrão que esta configurado em sua tabela.