Fala ae galera .... to com um probleminha xarope de resolver, vou comentar o problema a minha estrtura e depois descreve-lo , se alguem puder me ajudar eu ficaria muito grato.
estou usando o framework xajax 0.54
PHP 5
MySQL 5.2.4
Apache 2.2.8
Montei um script ajax.common.php
Onde eu ... instancio o xajax , efetuo as cfgs, registro as funcoes ....
Outro script ajax.server.php
Onde eu crio as funções que serão chamadas nas páginas, a maioria das funções usam classes externas que são declaradas no inicio do script, essas classes fazem as consultas, inserções, enfim, são elas que interagem diretamente com o db. Pra ficar mais claro vou colocar um exemplo
# ajax.server.php
require("class.agenda.php");
function facaisso($frm) {
$obj = new xajaxResponse();
$agenda = new agenda;
$agenda->gravar($frm);
if ($agenda->erro) {
$obj->alert($agenda->erro);
return $obj;
} else {
$obj->aler($agenda->resultado);
return $obj;
}
}
o problema é:
O formulário é pasado como um parâmetro, e os campos podem conter caracteres acentuados, quando a classe recebe o formulario, ela testa os dados e salva no db, outra classe faz o processo inverso para a recuperação.
Já tentei usar o htmlentities antes de salvar e na recuperação dos dados, porém , os entities só são aceitos quando eu utilizo o xajax->assign, quando eu tento jogar os valores devolta aos campos com o xajax->script, os acentos ficam doidos.
já tentei fazer de tudo que é jeito, convertendo na ida e nao da volta, na volta e nao na ida, nos dois, em nenhum e sempre da a mesma xxxxxx.
O que eu andei percebendo, é que os dados chegam na classe já com os caracteres acentuados com problemas, ou seja, em algum lugar entre o form html e a classe eles estão sendo lidos em utf-8.
estou usando o $xajax->configure("characterEncoding","ISO-8859-1"); no arquivo ajax.common.php depois da classe ser instanciada, o debug informa que o ajax está usando o ISO-8859-1. é ai que eu não entendo.
O HTML está setado para usar o ISO-8859-1 tb, mas mesmo assim a conversão é feita antes mesmo que eu possa usar o htmlentities.
Vejam:
Usuario -> xajax(form) -> Classe -> db;
Cuiabá -> Cuiabá -> Cuiabá -> db
OK ERRO
Ao meu entender ela deveria proceder como
Cuiabá -> Cuiabá -> Cuiabá -> db
Alguem ?
Acentuação Xajax 0.5 Por Post
Started By strago, 10/04/2008, 09:48
4 replies to this topic
#1
Posted 10/04/2008, 09:48
#2
Posted 10/04/2008, 09:54
usa utf8_encode no lugar de htmlenties ... para resolver problemas com acentos no ajax
DBPlex dbplex.com.br
#3
Posted 10/04/2008, 10:34
Não resolveu,
O problema é que os dados saem do form html para o xajax pelo método POST, o xajax reenvia o form para a Classe já com os acentos doidos, na classe, não importa o que eu faça, pq ele ja ta com os acentos trocados. O que eu não quero é ter que no xajax, ler os campos e envia-los a classe como parâmetros separados. Mesmo porque eu axo que eles vão ter o mesmo problema.
Alguma coisa me diz que é algo besta que ta passando desapercebido, vou colar os scripts e funcoes que estou usando pra ver c ajuda.
O problema é que os dados saem do form html para o xajax pelo método POST, o xajax reenvia o form para a Classe já com os acentos doidos, na classe, não importa o que eu faça, pq ele ja ta com os acentos trocados. O que eu não quero é ter que no xajax, ler os campos e envia-los a classe como parâmetros separados. Mesmo porque eu axo que eles vão ter o mesmo problema.
Alguma coisa me diz que é algo besta que ta passando desapercebido, vou colar os scripts e funcoes que estou usando pra ver c ajuda.
<?php
//ajax.common.php
require("../xajax/xajax_core/xajax.inc.php");
$xajax = new xajax("class/ajax.server.php");
$xajax->configure('debug', true);
$xajax->configure("characterEncoding","ISO-8859-1");
$xajax->configure('javascript URI', '../xajax/');
$xajax->registerFunction("agendaListar");
$xajax->registerFunction("agendaGravar");
?>//ajax.server.php
<?php
require("../dbdoc/class.agenda.php");
function agendaGravar($frm) {
$obj = new xajaxResponse();
$agenda = new agenda;
$agenda->gravar($frm);
if ($agenda->erro) {
$obj->alert($agenda->erro);
return $obj;
} else {
if ($agenda->tipo == "Exito") {
$obj->script("$('edtNumero').value = ''");
$obj->script("$('edtTitulo').value = ''");
$obj->script("$('edtCidade').value = ''");
$obj->script("$('edtEnd').value = ''");
$obj->script("$('edtData').value = ''");
$obj->script("$('edtHora').value = ''");
$obj->script("$('edtConf').options[0].selected = \"selected\";");
$obj->script("$('btnGravar').disabled = true");
$obj->assign('edtDescricao', 'innerHTML', '');
$obj->script("$('edtTitulo').focus();");
$obj->alert($agenda->resultado);
return $obj;
} else {
$obj->alert($agenda->erro);
return $obj;
}
}
}
require("class/ajax.common.php");
$xajax->processRequest();
?>//class.agenda.php
<?php
class agenda {
public $resultado;
public $erro;
public $tipo;
//GRAVAR COMPROMISSO
function gravar($frm) {
if (strlen(trim(strip_tags(stripslashes($frm['edtTitulo'])))) == "0") {
$this->tipo = "Dados";
$this->erro = "Por favor, informe um título para o compromisso.";
return $this->tipo;
} elseif (strlen(trim(strip_tags(stripslashes($frm['edtCidade'])))) == "0") {
$this->tipo = "Dados";
$this->erro = "Por favor, informe a cidade do compromisso.";
return $this->tipo;
} elseif (strlen(trim(strip_tags(stripslashes($frm['edtEnd'])))) == "0") {
$this->tipo = "Dados";
$this->erro = "Por favor, informe o endereço do compromisso.";
return $this->tipo;
} elseif (strlen(trim(strip_tags(stripslashes($frm['edtData'])))) != "10") {
$this->tipo = "Dados";
$this->erro = "Por favor, informe uma data válida.\r\n (Ex: 00/00/0000).";
return $this->tipo;
} elseif (strlen(trim(strip_tags(stripslashes($frm['edtHora'])))) < "5") {
$this->tipo = "Dados";
$this->erro = "Por favor, informe uma hora válida.\r\n (Ex: 00:00).";
return $this->tipo;
} elseif (strlen(trim(strip_tags(stripslashes($frm['edtDescricao'])))) == "0") {
$this->tipo = "Dados";
$this->erro = "Por favor, descreva o compromisso.";
return $this->tipo;
} else {
$dbx = new db;
$dbx->conectar();
if ($dbx->erro) {
$this->tipo = "Conexao";
$this->erro = "Não foi possível gravar o compromisso";
return $this->tipo;
} else {
//VERIFICANDO SE EXISTE ALGUM COMPROMISSO NA MESMA DATA E HORA
$titulo = checkslashes(strip_tags(stripslashes(htmlentities($frm['edtTitulo']))));
$cidade = checkslashes(strip_tags(stripslashes(htmlentities($frm['edtCidade']))));
$end = checkslashes(strip_tags(stripslashes(htmlentities($frm['edtEnd']))));
$data = checkslashes(datetosql(strip_tags(stripslashes($frm['edtData']))));
$hora = checkslashes(strip_tags(stripslashes($frm['edtHora'])));
$descricao = checkslashes(strip_tags(stripslashes(htmlentities($frm['edtDescricao']))));
$conf = $frm['edtConf'];
if (!strip_tags(stripslashes($frm['edtNumero']))) {
$sql = "SELECT * FROM tab_agenda WHERE (data = '$data') AND (hora = '$hora')";
$dbx->consultar($sql);
if (@mysql_num_rows($dbx->consulta) > "0") {
$temp = $frm['edtData'];
$this->tipo = "Dados";
$this->erro = "Desculpe, Já existe um compromisso agendado para $temp as $hora";
return $this->tipo;
}
$sql = "INSERT INTO tab_agenda SET data = '$data', hora = '$hora', compro = '$titulo', cidade = '$cidade', end = '$end', descricao = '$descricao', conf = '$conf'";
} else {
$id = checkslashes(strip_tags(stripslashes($frm['edtNumero'])));
$sql = "UPDATE tab_agenda SET data = '$data', hora = '$hora', compro = '$titulo', cidade = '$cidade', end = '$end', descricao = '$descricao', conf = '$conf' WHERE id_agenda = '$id'";
}
//INSERÇÃO
$dbx->consultar($sql);
if ($dbx->erro) {
$this->tipo = "Consulta";
$this->erro = "Não foi possível gravar o compromisso";
return $this->tipo;
} else {
$this->tipo = "Exito";
$this->erro = "";
if ($id) {
$this->resultado = "O compromisso foi alterado.";
} else {
$this->resultado = "O compromisso foi agendado.";
}
return $this->tipo;
}
}
}
}
}
?>//lista-agenda.php
//form
<form id="frmCadastro" action="" onsubmit="return false">
<fieldset class="field-pesquisa">
<legend class="ind-texto">Cadastro de Compromissos</legend>
<p class="texto-l">Número</p>
<p class="texto-r">Título</p>
<p class="campo-l"><input type="text" class="ind-filtro" id="edtNumero" name="edtNumero" size="20" maxlength="11" readonly="true" /></p>
<p class="campo-r"><input type="text" class="ind-filtro" id="edtTitulo" name="edtTitulo" size="126" maxlength="100" onchange="checkCampos('frmCadastro');" onblur="checkCampos('frmCadastro');" onkeydown="Tabular();" /></p>
<p class="texto-l2">Cidade</p>
<p class="texto-r">Endereço</p>
<p class="campo-l"><input type="text" class="ind-filtro" id="edtCidade" name="edtCidade" size="53" maxlength="100" onchange="checkCampos('frmCadastro');" onblur="checkCampos('frmCadastro');" onkeydown="Tabular();" /></p>
<p class="campo-r"><input type="text" class="ind-filtro" id="edtEnd" name="edtEnd" size="93" maxlength="100" onchange="checkCampos('frmCadastro');" onblur="checkCampos('frmCadastro');" onkeydown="Tabular();" /></p>
<p class="texto-l">Data</p>
<p class="texto-l">Hora</p>
<p class="texto-r">Confirmado</p>
<p class="campo-l">
<input type="text" class="ind-filtro" id="edtData" name="edtData" size="15" maxlength="10" onchange="checkCampos('frmCadastro');" onblur="checkCampos('frmCadastro');" onkeydown="Tabular();" />
<a href="#" onclick="displayCalendar(document.forms[0].edtData,'dd/mm/yyyy',this)"><img src="imagens/calendario.gif" height="16" width="16" alt="Calendário" /></a>
</p>
<p class="campo-l">
<input type="text" class="ind-filtro" id="edtHora" name="edtHora" size="16" maxlength="8" onchange="checkCampos('frmCadastro');" onblur="checkCampos('frmCadastro');" onkeydown="Tabular();" />
<a href="#" onclick="displayCalendar(document.forms[0].edtHora,'hh:ii',this,true,document.forms[0].edtHora)"><img src="imagens/calendario.gif" height="16" width="16" alt="Calendário" /></a>
</p>
<p class="campo-r">
<select id="edtConf" name="edtConf" class="ind-filtro">
<option value="Aguardando" selected="selected">Aguardando</option>
<option value="Confirmado">Confirmado</option>
<option value="Cancelado">Cancelado</option>
</select>
<p class="foto-texto">Descrição</p>
<p class="foto-campo">
<textarea id="edtDescricao" name="edtDescricao" cols="151" rows="5" class="ind-filtro" onchange="checkCampos('frmCadastro');" onblur="checkCampos('frmCadastro');"></textarea>
</p>
<p class="foto-btn">
<input type="button" value=" Gravar " id="btnGravar" name="btnGravar" class="ind-filtro" disabled="true" onclick="xajax_agendaGravar(xajax.getFormValues('frmCadastro'));" />
<input type="button" value="Excluir" id="btnExcluir" name="btnExcluir" class="ind-filtro" disabled="true" onclick="agendaExcluir($('edtNumero').value);" />
<input type="reset" value=" Limpar " id="btnLimpar" name="btnLimpar" class="ind-filtro" onclick="$('btnExcluir').disabled = true; $('btnGravar').disabled = true;" />
</p>
</fieldset>
</form>
#4
Posted 10/04/2008, 10:56
vc tem q colocar o utf8_encode na pagina que processa os dados antes de serem enviados para classe ...
DBPlex dbplex.com.br
#5
Posted 10/04/2008, 12:36
Tohma obrigado pela dica mas ...
hehehe
Eu mudei pra utf8_decode e coloquei dentro da classe agenda quando estou recuperando os dados recebidos
$titulo = checkslashes(strip_tags(stripslashes(utf8_decode($frm['edtTitulo']))));
agora salvou corretamente no DB.
=]
hehehe
Eu mudei pra utf8_decode e coloquei dentro da classe agenda quando estou recuperando os dados recebidos
$titulo = checkslashes(strip_tags(stripslashes(utf8_decode($frm['edtTitulo']))));
agora salvou corretamente no DB.
=]
2 user(s) are reading this topic
0 membro(s), 2 visitante(s) e 0 membros anônimo(s)










