Codificação de caracteres jQuery AJAX

votos
56

Atualmente estou codificação um site francês. Há uma página cronograma, onde um link do lado pode ser usado para carregar cronograma outro dia.

Aqui está o JS que estou usando para fazer isso:

    <script type=text/javascript>
    function load(y) {
        $.get(y,function(d) {
            $(#replace).html(d);
            mod();
        });
    }
    function mod() {
        $(#dates a).click(function() {
            y = $(this).attr(href);
            load(y);
            return false;
        });
    }
    mod();
    </script>

O AJAX real funciona como um encanto. Meu problema encontra-se com a resposta ao pedido.

Porque é um site francês, há muitas letras acentuadas. Eu estou usando o charset ISO-8859-15 por essa mesma razão. No entanto, na resposta ao meu pedido AJAX, os acentos estão se tornando? 'S porque a codificação de caracteres parece ser alterado novamente para UTF-8.

Como faço para evitar isso? Eu já tentei adicionar algum PHP no topo dos documentos solicitados para definir o conjunto de caracteres:

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

Mas isso não parece que quer trabalhar. Alguma ideia?

Além disso, enquanto qualquer um que você está procurando aqui ... por que a coluna mais à direita parecem tornar-se menor quando uma nova página é carregada, fazendo com que a tabela para distorcer e cada <li>dentro do <td>para embrulhar para a próxima linha?

Felicidades

Publicado 16/02/2009 em 15:30
fonte usuário
Em outras línguas...                            


22 respostas

votos
22

UTF-8 é suposto para lidar com todos os acentos e caracteres estrangeiros - por que não usá-lo em sua fonte de dados?

EDIT
[ cópia de arquivo do arquivo de teste. ] Com seus dados

Tudo deve ser UTF-8 em primeiro lugar. I carregado os ficheiros no bloco de notas ++, convertido para utf-8 e manualmente mudado para as charactes eram necessários acentos. Uma vez feito trabalho de tudo como um encanto.

BTW, a menos que seu servidor está definido para arquivos php-processo .html, os arquivos que você está carregando com ajax são não obter o seu charset iso. Se você insistir em usar o charset iso, solicitar um arquivo php em vez de um arquivo html, e definir o charset no cabeçalho (não no próprio arquivo)

Respondeu 16/02/2009 em 15:33
fonte usuário

votos
10

Você precisa configurar o servidor para usar ISO-8859-15 como a codificação de caracteres (adicionando o cabeçalho HTTP apropriado). Fazê-lo no corpo do html não vai ajudar.

Eu posso ver esta linha

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

na fonte do seu html. Isso não deve acontecer. Usando cabeçalhos HTTP ao vivo eu não posso ver o cabeçalho HTTP charset apropriado. Use isso para ambos sua primeira página eo serviço ajax.

Respondeu 16/02/2009 em 15:53
fonte usuário

votos
6

Ao imprimir as variáveis ​​no arquivo de ajax. Colocar um

htmlentities()

Ao redor deles, ver se funciona. Trabalhou para mim em um aplicativo ajax islandês.

Respondeu 16/02/2009 em 16:00
fonte usuário

votos
60

Especificando o tipo de conteúdo no AJAX-call resolvido meus problemas em um site norueguês.

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
});

Você também tem de especificar o charset no servidor.

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
Respondeu 16/02/2009 em 16:04
fonte usuário

votos
0

Que tive o mesmo problema com páginas que:

  • Mostrar-se muito bem quando chamado normalmente
  • Ter os caracteres especiais confuso quando chamado através de uma solicitação ajax

Para resolver o problema (usando php), eu usei utf8_encode()ou htmlentities()nos dados de origem. Ambos trabalharam, eu usei-los em diferentes projetos.

Respondeu 16/02/2009 em 16:13
fonte usuário

votos
1

Eu não concordo tudo deve ser UTF-8, você pode fazê-lo funcionar perfeitamente com a norma ISO 8859, eu, leia minha resposta aqui.

a minha resposta em stackoverflow

Respondeu 04/08/2009 em 19:12
fonte usuário

votos
18
$str=iconv("windows-1250","UTF-8",$str);

o que me ajudou na eventualmente,

Respondeu 25/01/2010 em 08:15
fonte usuário

votos
7

Eu strongl sugerem o uso da fuga javascript () Método

você pode usar isso com jQuery, agarrando um valor forma como assim:

var encodedString = escape($("#myFormFieldID").val());
Respondeu 12/05/2010 em 00:42
fonte usuário

votos
4

Eu estava tendo problemas semelhantes, trabalhando em um sistema de comentários de conteúdo em nossa Portal espanhol. O que finalmente resolveu o meu problema, depois de muitas horas de busca, em vez de mexer com jQuery charset, que parece usar utf-8 não importa o que, foi para decodificar a partir de utf-8 de volta para ISO-8859-1 no PHP que processou o POST ajax. Em PHP há um construído em função utf8_decode(), então a primeira coisa que eu faço com a seqüência de comentários é esta:

$comentario = utf8_decode($_POST['comentario']);

(e então eu usei nl2br()e htmlentities()funções PHP a fim de preparar o texto a ser armazenado com entidades HTML em vez de caracteres especiais)

Boa sorte e paz em todo! Seba

Respondeu 04/06/2010 em 00:15
fonte usuário

votos
3

Tenho vindo a brincar com este problema e descobri que esta solução funciona para Firefox e Safari (sim, im em um Mac no momento).

quando chegar o pedido, eu fiz um tipo de conteúdo = iso-8859-1 aqui:

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
  httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1');
        }
    }

Por favor, diga-me se alguém descobre isso não funciona no IE.

Respondeu 23/06/2010 em 12:36
fonte usuário

votos
0

Apenas mudou {"type":"GET"}para {"type":"POST"}e trabalhou como um encanto comISO-8859-1

Respondeu 05/11/2010 em 19:06
fonte usuário

votos
7

Para a minha aplicação PHP a solução foi incluir função utf8_decode para cada get variável $_POST.

Ex: (SERVIDOR LADO)

if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){
$variable = htmlentities($_POST['variable']); // wrong
$variable = htmlentities( utf8_decode($_POST['variable']) ); // right
}

Abraços !!! (Tchau tchau!!!)

Respondeu 10/02/2011 em 02:15
fonte usuário

votos
0

Se todo o aplicativo está usando ISO-8859-1, você pode modificar suas jquery.js substituindo todas as ocorrências de encodeURIComponentpor escape(existem 2 ocorrências para substituir no script jquery atual - 1.5.1)

Veja encodeUIComponent e escapar para mais informações

Respondeu 23/03/2011 em 13:09
fonte usuário

votos
3

Eu tive um problema semelhante com ASP com minhas páginas. Eu resolvidos para:

1) Inserido no início do arquivo ASP chamado por Jquery método ajax a instrução:

Response.Charset = "windows-1252"

In My página ASP antes do charset não foi definida e eu tinha guardado o meu arquivo com a codificação ANSI (com um editor de texto como bloco de notas ++)

2) No arquivo HTML que chama o arquivo ASP com o método jquery ajax Eu inseri o parâmetro do tipo de conteúdo que você vê abaixo:

$.ajax({         
data: parameters,         
type: "POST",         
url: ajax_url,
datatype: 'html',         
contentType: "text/html;charset=windows-1252",

Resumidamente, é importante definir no seu arquivo ASP chamado de charset. Estranhamente, eu vejo que meu jQuery funciona com o Windows-1252, mas não funciona com charset ISO-8859-1: neste caso método ajax jquery dar uma exceção.

Respondeu 15/05/2011 em 23:01
fonte usuário

votos
1
<script type="text/javascript">
  function GetContent(idUser){ 
    $.ajaxSetup({
      url: 'ping.php'
    });

    $.ajax({
      type: "POST",
      url: "blablabla.php",
      dataType: "text",
      data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
      success: function(html) {
        $('#user_specified_content').html(html);
      }
    });     
  }
</script> 

Este é o script a partir do qual eu recebo o meu conteúdo da página blabla.php.

Quando eu receber meus dados em caso de sucesso meus acentos não aparecem.

Eu encontrei uma solução de trabalho super bem pelo meu próprio para a recuperação de dados com detalhes sobre os dados buscados de .successfunção

Na minha página blabla. Eu fiz isso para trazer uma solução para o meu problema:

Eu uso utf8_encode(place your data here)no meu arquivo php. Veja-o em ação abaixo:

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}
Respondeu 08/06/2011 em 18:55
fonte usuário

votos
2

Tive um problema com letras suecos / norueguês aparecendo como pontos de interrogação, apesar de ter especificado:

contentType: "application/json; charset=utf-8",

Isto foi resolvido adicionando encodeURIComponentpara a cadeia.

url: "/set_comment.do?text=" + encodeURIComponent(comment),
Respondeu 26/02/2012 em 14:24
fonte usuário

votos
0

Já enfrentei mesmo problema e tentou diversas maneiras. E eu encontrei a solução. Se você definir pedido cabeçalho para "Aceitar" como abaixo;

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        dataType: 'json',
        beforeSend : function(xhr) {
            xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
        },
        success: callback
});

você vai ver que todos os personagens parece correto

Respondeu 21/05/2012 em 09:02
fonte usuário

votos
0

Eu vim por esta questão com exatamente o mesmo problema que o consulente. As respostas aqui são muito informar, e eu tentei quase cada uma das respostas sugeridas. Nenhuma das respostas aqui trabalhou para me embora - pode ter havido uma ligeira diferença no meu problema. E isso parece ser o caso de muitos. Eu tentei muito antes de acabar com uma resposta.

Então agora eu estou adicionando à já longa lista de respostas, uma solução própria, que resolveu o meu tipo de problema de codificação.

Eu fiz apenas duas coisas. No script de conexão de banco de dados, acrescentei:

mysql_set_charset('utf8',$connection);

e para além de que:

  • Eu mudei a codificação de todos os arquivos para UTF-8

O ponto é que tudo deve ser da mesma codificação. E ao criar novos php arquivos, para os scripts que não é suficiente apenas para alterar a codificação no script - o próprio arquivo deve ser corretamente codificada.

Respondeu 07/07/2012 em 19:27
fonte usuário

votos
0

Se você estiver usando CodeIgniter você pode resolver isso adicionando o seguinte código ao seu controlador antes de carregar qualquer Visualizações (supondo que você tenha charsetconfigurado corretamente em sua configuração. Se não, basta colocar charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));

A maneira que eu fiz foi para adicionar essa linha para o construtor de MY_Controller, meu superclasse para todos os controladores, desta forma eu me certificar de que não terá problemas de codificação em qualquer lugar.

A propósito, isto não afecta os retornos JSON (que são codificados em UTF-8).

Respondeu 11/08/2013 em 16:31
fonte usuário

votos
0

Tentei ler um arquivo json / texto local usando $ .ajax e a codificação não se exercitar no primeiro .. eu tenho que trabalhar salvando o arquivo json como codificação UTF-8. Isso pode ser feito simplesmente por janelas notepad .. usar "salvar como", e, em seguida, abaixo do nome do arquivo que você pode definir a codificação para UTF-8.

boa sorte!

Respondeu 29/08/2013 em 17:05
fonte usuário

votos
2

Eu tentei muitas sugestões para ler em um arquivo de texto com caracteres especiais alemãs (a, o, u). No final:

 $.ajax({
        async:false,
        type: "GET",
        url: "data/FileName.txt",
        dataType: "text",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function (data) {
           alert(data);
        }
    });

deixe-me ler os caracteres especiais, mas somente depois que eu explicitamente salvo FileName.txt no formato UTF-8 . O formato padrão para salvar arquivos de texto no Editor de Windows é ANSI e não UTF-8, mas pode ser alterado se você "Salvar como" e usar a caixa de depósito ao lado do Save-Botão ou usar uma melhor editor para começar.

Respondeu 10/09/2013 em 21:17
fonte usuário

votos
0

Eu tive problema semelhante. Tenho arquivo de texto com dados JSON que tem texto francês. Havia sempre questão exibindo alguns personagens. No meu caso, o programa JavaScript usa Ajax para recuperar o arquivo de texto JSON como segue:

$.ajax({
    async: false,
    type: 'GET',
    url: 'some-url',
    success: function(data, status) {
        mainController.constructionStageMaster = data.records;
     }
});

Os dados retornados sempre teve letras francesas acentuados incorretas.

O texto JSON é o seguinte:

{
    "records": [
        {
            "StageDesc": "Excavation, Fondation et Bases",
            "Allowed": 9,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Étanchement et Remblayage",
            "Allowed": 3,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Encadrement et revêtement mural intermédiaire",
            "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
            "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
            "Allowed": 15,
            "Completed": 0,
            "TotalCompleted": ""
        }
        ...
    ]
}

Nota na dados de exemplo acima, o 3º elemento, coloquei o texto com o correto ée incorretoê letras acentuadas franceses.

Para sua informação, parecia que há alguma configuração global do projeto Eclipse usando ISO-8859-1 codificação de caracteres. No seu caso, pode ser codificação diferente.

Depois de verificar as soluções acima e brincar com o projeto, isso é o que resolveu o meu problema:

  • Encontrar a fonte do texto que tem a exibição correta do texto francês
  • Copie o texto
  • Goto Eclipse, abra o arquivo de texto que tem os dados
  • Direito do mouse no arquivo no Explorer, propriedades abertas, e alterar a codificação para ISO-8859-1
  • Corrigir o texto para que ele seja exibido corretamente. Use copiar / colar ou o teclado
  • Você pode ter que usar as setas do teclado (esquerda / direita) para certificar-se não existem letras culpado ocultos que irá mostrar-up em HTML com uma forma engraçada. Excluir tal carta escondida
  • Salve o arquivo

Agora, no meu caso, eu não especificar quaisquer opções de codificação na chamada Ajax e funciona bem. Além disso, se eu mudar a codificação do arquivo de texto com dados JSON, seria ainda funcionam bem.

Tarek

Respondeu 04/11/2016 em 18:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more