Webly: [AJAX] Acentuação no AJAX - Solução final - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de javascript/ECMAScript/AJAX.

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.
Página 1 de 1

[AJAX] Acentuação no AJAX - Solução final Com 1 linha de código!!! ASP, PHP, JSP. Avaliar tópico: ***-- 1 Votos

#1 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 07 julho 2006 - 04:26

Nota do Autor após ler o tutorial depois de 2 anos: Este tutorial não presta, contem inverdades e enganos. Nem sempre ele funciona. Talvez ele dê certo pra você.

Neste tutorial, explico como RECEBER corretamente dados com caracteres especiais como cedilha e acentos. Para enviar dados acentuados corretamente, leia esta solução (no sub-capítulo "Recebendo os dados (no PHP)".
Publicado também no meu blog.

Explicações e lero-lero iniciais:

O XMLHttpRequest, a criança por trás do ajax, trabalha no padrão UTF-8 por default, tanto pra enviar dados quanto pra receber. Isso vem do próprio browser mesmo. Nos primórdios da internet, o Tim Berners-Lee ainda não estava tão preocupado com a internacionalização do HTML. Este esforço só começou a acontecer em novembro de 1995, depois da formação da W3C, onde visavam extender as capacidades do HTML 2 (falarei disso no histórico do HTML que estará presente no meu TCC). Por este motivo o Ajax dá vários problemas com nossos caracteres.

Para tentar resolver este problema, temos a forma correta é é o uso de HTML Entities, porém isto nem sempre é possível.
Para contornar já ví muitas viagens, que usam gambiarras de encode, escape, etc. nos scripts do lado do servidor (asp, php, jsp, etc). Uma complicação só!!!

Em minhas pesquisas, descobri que a forma correta de renderizar nosso português é simplesmente usando o charset ISO-8859-1 e não o UTF-8. Simples assim. Você deve enviar cabeçalhos pro navegador, informando que você usará ISO-8859-1. Agora é só você configurar seu servidor pra servir ISO-8859-1 por padrão, se você tiver acesso a isto OU indicar o charset no início do seu script server side, com apenas 1 (uma) linha de código!! -- Me perdoem o "servidor pra servir", é que não achei outros termos. :)

"Chega de enrolação mico, e mostra logo comé que faz."

1) Caso você não possa alterar as configurações de caracteres do servidor:

É só adicionar a seguinte linha no começo da página que será retornada para o AJAX:
  • ASP: <% Response.Charset="ISO-8859-1" %>
  • PHP: <?php header("Content-Type: text/html; charset=ISO-8859-1",true) ?>
  • JSP: <%@ page contentType="text/html; charset=ISO-8859-1" %>
2) Caso você tenha como alterar as configurações de caracteres do servidor:

Adicione o charset ISO-8859-1 como charset default do seu servidor.

Caso seu servidor seja o Apache, adicione (ou altere) a seguinte linha no http.conf:
AddDefaultCharset ISO-8859-1
(agradecimentos ao reges (nao_sei) e ao mestre fyoda)


Observações finais:
  • Lembre-se: Se for possível trabalhar com os HTML Entities, trabalhe!! Você pode pesquisar funções de conversão para html entities na referência da sua linguagem.
  • Este script é apenas para resolver os problemas da recepção dos dados acentuados. Para os problemas de envio, leia esta solução (no sub-capítulo "Recebendo os dados (no PHP)". ou este tutorial.
  • Se voce quer carregar um arquivo xml ou html simples que não usa linguagem server side, talvez voce consiga resolver o problema da acentuação usando só o a tag meta, eu testei porém não consegui. Provavelmente porque os METAs e headers já foram carregadas no início da página principal.
  • Outra forma é usar o responseXML ao invés do responseText pois, de acordo com a mozilla.org, o responseXML interpreta corretamente outros caracteres e não apenas o UTF-8. (agradecimentos ao Ederson)
  • O problema também pode estar sendo causado por banco de dados. Se for isto, verifique as configurações de linguagem de seu banco de dados e prefira utilizar o ISO-8859-1.

valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#2 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 11 outubro 2006 - 11:18

Olá weblivre,

Vc também deve se lembrar de olhar os tipos de codificação que estão no Banco de dados e no PHP. Deixar tudo igual é sempre bom.

- No seu arquivo de configuração do Apache (httpd.conf caso esteja usando apache) veja se há o "AddCharset ISO-8859-8 .iso8859-8" lá embaixo.

- No seu php.ini altere esta linha "default_charset = "iso-8859-1"" pra te simplificar o trabalho.

- E o importante: Verifique o charset de seu banco de dados. Se seu banco for mysql vc pode olhar a codificação que tá nele através da função mysql_client_encoding.

Lembrando que a melhor saída é: NÃO usar estas gambiarras que eu sugiro, mas sim usar as html entities já padrões no HTML desde mil novescentos e lá vai bolinha como &atilde; para ã, &ccedil; para ç, etc, etc.

Qualquer coisa posta ae.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#3 Membro offline   mestre fyoda Ícone

  • Ícone
  • Grupo: Membro Amigo
  • Posts: 815
  • Cadastrado: 16-julho 06

Postou 13 outubro 2006 - 03:44

webLivre.info esta funcionando para o FIREFOX e o IE ?
0

#4 Membro offline   Lucasbr Ícone

  • O.o
  • Ícone
  • Grupo: Administradores
  • Posts: 2441
  • Cadastrado: 03-julho 06
  • Localização:SBC - SP
  • Interesses:Meus interesses

Postou 13 outubro 2006 - 07:44

na boa, eu nunca tive problema nenhum com acentos em ajax... sempre foi 100%...

uso o Response.Charset="ISO-8859-1" nas paginas e funciona tudo de boa..
Lucas Cavallari

Dúvidas? No fórum... nada de MP nem MSN...!
Se a resposta te ajudou, retorne ao topico e diga, pois facilitará para outros usuarios...
0

#5 Membro offline   guilherme014 Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 105
  • Cadastrado: 18-outubro 06

Postou 14 novembro 2006 - 06:44

o meu continua com os problemas, esta assim o

<?php
session_start();
header("Content-Type: text/html; charset=ISO-8859-1",true);
$s = session_id();
$act = $_REQUEST['act'];
include_once "class/db.inc.php";
include_once "class/global.inc.php";
include_once "funcoes/funcoes.php";
$db = new db();
$gravar = $_REQUEST['gravar'];
$data = date("Y-m-d G:m:s");
?>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

o que pode ser, alguns dados vem do banco outros nao
Novo site de Desenvolvimentos de Sistemas para Web e Programas Internos:
www.mktsystem.com.br

Site da NETSOFT
www.netsoft.eti.br
0

#6 Membro offline   guilherme014 Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 105
  • Cadastrado: 18-outubro 06

Postou 16 novembro 2006 - 02:52

ja esta ok
Novo site de Desenvolvimentos de Sistemas para Web e Programas Internos:
www.mktsystem.com.br

Site da NETSOFT
www.netsoft.eti.br
0

#7 Membro offline   Eron Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 44
  • Cadastrado: 01-dezembro 06

Postou 26 janeiro 2007 - 05:18

Ae galera blz?!

Bom, estou esse problema de acentuação ao gravar numa tabela de cadastro muitos dados. São no total 22 eu acho.
Na primeira linha de código utilizo o header("Content-Type: text/html; charset=ISO-8859-1",true); mas mesmo assim
não funciona.

Tenho outro aquivo que grava somente 4 campos, lá funciona, mas creio que isso não seja o problema, número de campos.
O que pode estar acontecendo?

Script:
<?

header("Content-Type: text/html;  charset=ISO-8859-1",true);

?>

&lt;script src="include/ajax.js"></script>
&lt;script src="include/swfobject.js"></script>
&lt;script src="include/geral.js"></script>

<?

include("banco.php");
include_once("Mail.php");
include_once('Mail/mime.php');

/*
PADRÃO
*/

$data = date("Y-m-d");
$form = explode("-",$data);


/*
CAMPOS DO FORM
*/

$usuario 		 = $_REQUEST['usuario'];
$senha 		 	 = $_REQUEST['senha'];
$nome 	 		 = $_REQUEST['nome'];
$sexo 	 		 = $_REQUEST['sexo'];
$nascimento 	 = $_REQUEST['ano']."-".$_REQUEST['mes']."-".$_REQUEST['dia'];
$estadocivil 	 = $_REQUEST['estadocivil'];
$email 	 		 = $_REQUEST['email'];
$endereco 		 = $_REQUEST['endereco'];
$numero 		 = $_REQUEST['numero'];
$complemento 	 = $_REQUEST['complemento'];
$cep 			 = $_REQUEST['cep'];
$bairro 	 	 = $_REQUEST['bairro'];
$cidade 		 = $_REQUEST['cidade'];
$estado 	 	 = $_REQUEST['estado'];
$pais 	 		 = $_REQUEST['pais'];
$telefone 		 = $_REQUEST['telefone'];
$celular		 = $_REQUEST['celular'];
$empresa 		 = $_REQUEST['empresa'];
$segmento	 	 = $_REQUEST['segmento'];
$departamento 	 = $_REQUEST['departamento'];
$localizacao 	 = $_REQUEST['localizacao'];
$cargo 	 		 = $_REQUEST['cargo'];
$perfil 	 	 = $_REQUEST['perfil'];

function nomePerfil($var){
	switch($var){
		case 1: return "Armazenagem Geral"; break;
		case 2: return "Armazenagem Alfandegada"; break;
		case 3: return "Comércio Exterior"; break;
		case 4: return "Eventos do Setor"; break;
		case 5: return "Serviços MAG"; break;
		case 6: return "Suply Chain Management"; break;
		case 7: return "Distribuição"; break;
		case 8: return "Transporte"; break;
		case 9: return "Novidades MAG"; break;
	}
}

foreach ($perfil as $p){
	$arr_p[] = $p;
	$arr_f[] = nomePerfil($p);
}

$perfil_todos = implode("-", $arr_p);
$perfil_email = implode(" | ", $arr_f);

$sql  = "insert into bra_magnews (data,usuario,senha,nome,sexo,nascimento,estadocivil,email,endereco,numero,complemento,cep,bairro,cidade,estado,pais,telefone,celular,empresa,segmento,departamento,localizacao,cargo,perfil)";
$sql .= " values ('".$data."','".$usuario."','".$senha."','".$nome."','".$sexo."','".$nascimento."','".$estadocivil."','".$email."','".$endereco."','".$numero."','".$complemento."','".$cep."','".$bairro."','".$cidade."','".$estado."','".$pais."','".$telefone."','".$celular."','".$empresa."','".$segmento."','".$departamento."','".$localizacao."','".$cargo."','".$perfil_todos."')";
$res = $db->query($sql);

$msg = "
Data do Cadastro: ".$form[2]."/".$form[1]."/".$form[0]."<br>
Usuário: ".$usuario."<br>
Senha: ".$senha."<br>
Nome: ".$nome."<br>
Sexo: ".$sexo."<br>
Data de Nascimento: ".$_REQUEST['dia']."/".$_REQUEST['mes']."/".$_REQUEST['ano']."<br>
Estado Civil: ".$estadocivil."<br>
E-mail: ".$email."<br>
Endereço: ".$endereco."<br>
Número: ".$numero."<br>
Complemento: ".$complemento."<br>
CEP: ".$cep."<br>
Bairro: ".$bairro."<br>
Cidade: ".$cidade."<br>
Estado: ".$estado."<br>
País: ".$pais."<br>
Telefone: ".$telefone."<br>
Celular: ".$celular."<br>
Empresa: ".$empresa."<br>
Segmento: ".$segmento."<br>
Departamento: ".$departamento."<br>
Localização: ".$localizacao."<br>
Cargo: ".$cargo."<br>
Assunto(s) de Interesse: ".$perfil_email."
";

$crlf = "\n";

$mime = new Mail_mime($crlf);
$mime->setHTMLBody($msg);

$body = $mime->get();

$headers["From"] 	= "email@email.com";
$headers["Subject"] = "Cadastro";

$headers = $mime->headers($headers);

$params["host"] 	= "localhost";
$params["port"] 	= "25";
$params["auth"] 	= true;
$params["username"] = "email@email.com";
$params["password"] = "****";

$mail_object =& Mail::factory("smtp", $params);
$mail_object->send("email@email.com", $headers, $body); 

echo "&lt;script>";
echo "alert('Cadastro efetuado com sucesso.');";
echo "ajaxLink('conteudo','guia_logistico.php');";
echo "</script>";

?>

0

#8 Membro offline   lumiere Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 29
  • Cadastrado: 23-janeiro 07

Postou 16 março 2007 - 09:50

Pessoal, estou utilizando ColdFusion:

E fiz isso:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[url="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="[url="http://www.w3.org/1999/xhtml"]http://www.w3.org/1999/xhtml[/url]" xml:lang="pt-br"
lang="pt-br">


<header("Content-Type: text/html; charset=iso-8859-1");>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


E no Meu arquivo.cfc coloquei isso:

<cfcomponent extends="ajax">
<cfcontent type="text/html; charset=iso-8859-1">
  <cfprocessingdirective pageencoding="iso-8859-1">
  <cfscript>
  setEncoding("FORM","ISO-8859-1");
  setEncoding("URL", "ISO-8859-1");
 </cfscript>


Mas não funcionou. Alguém imagina o que estou fazendo errado?
:wacko:
0

#9 Membro offline   lumiere Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 29
  • Cadastrado: 23-janeiro 07

Ícone  Postou 16 março 2007 - 03:28

Pessoal consegui, mudei tudo para UTF-8 e deu certo aki:

<header("Content-Type: text/html; charset=UTF-8");>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ah e coloquei isso também:

<cfcontent type="text/html; charset=UTF-8">
0

#10 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 16 março 2007 - 05:25

Pode tirar esta linha pois ela não tá fazendo nada.
<header("Content-Type: text/html; charset=UTF-8");>

Acho que vc confundiu com PHP heh.

Diboas :joia:
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#11 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 25 maio 2007 - 01:12

[momento 'eu to me achando' ON]
Adivinha só qual artigo foi citado na revista www.com.br?

Pois é.
Imagem

Infelizmente os caras não falam o nome do autor :assobiando:
[/momento 'eu to me achando' OFF]

Aviso dado pelo meu brodi nghorta.

//Bom, pelo menos este re-up serviu para me lembrar de atualizar o artigo lá que tá meio desatualizado.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#12 Membro offline   Suisso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 32
  • Cadastrado: 07-maio 07

Postou 29 maio 2007 - 04:46

ehhehehe
bom depois de eu tentar tds as tecnicas existentes no mundo
eu consegui o q eu keria simplesmente mandando com escape via ajax e recebendo com rawurldecode no PHP

\o/
0

#13 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 29 maio 2007 - 08:28

Certo, mas espero que você tenha lido a observação inicial do meu tópico né? hehe

Quote

Neste tutorial, explico como RECEBER corretamente dados com caracteres especiais como cedilha e acentos. Para enviar dados acentuados corretamente, leia este tutorial.

valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#14 Membro offline   Suisso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 32
  • Cadastrado: 07-maio 07

Postou 30 maio 2007 - 04:04

sim sinho mico
eu li ehhehehehhe

alias essa sua função ae tb ficou show de bola bixo!

axo q c tinha q transformar td suas funçoes em jquery´s plugins pos gringo ve q no Brasil tb tem gente boa =p
0

#15 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 04 junho 2007 - 10:03

Quote

axo q c tinha q transformar td suas funçoes em jquery´s plugins pos gringo ve q no Brasil tb tem gente boa =p
hehehe, mas quase tudo que eu fiz já tem pro jquery heheh. to atrazado.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

Página 1 de 1


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)