codificação de caracteres parece funcionar em um servidor MAMP, mas não em um servidor WAMP

StackOverflow https://stackoverflow.com/questions/550895

Pergunta

Eu estive trabalhando em uma aplicação web que deve ser capaz de aceitar tags e consultas de pesquisa em vários idiomas. Isso não é pedir demais, não é?

Agora, no meu desenvolvimento do servidor MAMP tudo é grande. I adicionar tags multilingues, procure em qualquer língua que eu quero etc.

Por outro lado, no servidor WAMP produção, caracteres multilingues dar problemas. E nem mesmo o tempo todo, apenas uma parte do tempo, ou alguns dos personagens, eu não tenho certeza ainda.

O que acontece é que eles ficam caracteres extras e, em seguida, sua decodificação URL não é adequada.

Ambos os ambientes de uso PHP 5, MySQL e Apache.

Meu palpite é que eu tenho um lugar errado configuração.

Alguma idéia?

  • atualização: agora estou certo que é cartas particulares (o hebraico ?, ? Aleph por exemplo)

  • atualização: facilmente reproduzível: sempre as mesmas letras obter codificação errada

  • .
  • tipo de conteúdo é text/html; charset=utf-8

Além disso, eu já identificou-lo um pouco mais longe:
Eu uso a seqüência de pesquisa: ?????
Na página de resultados Eu vejo isso:

  • Na barra de endereços a frase de pesquisa estiver correta, devidamente url-codificado.
  • No HTML si vejo a string " _ ???? ", que é "%D7_%D7%99%D7%91%D7%A0%D7%99" o que significa que o ? foi codificado para "%D7_" em vez de "%D7%9C" como deveria ter.

Eu realmente não sei para onde ir mais longe.
Alguma ideia? alguém?

Foi útil?

Solução 3

Acontece que o problema está em algum lugar dentro parse_url () do PHP. Eu acho que em algumas versões, em algumas plataformas, parse_url () não manipula caracteres UTF corretamente. Ele foi flagrado em janelas pelo menos um mais tempo .

Eu era capaz de resolver isso por agora.

Obrigado por tempo e atenção de todos, Omer.

Outras dicas

Charsets são reunir um conceito simples. A coisa confusa sobre eles, é que existem vários níveis em que isso deve ser feito corretamente. Se você fracassar em um só lugar, ele geralmente irá mostrar em um lugar completamente diferente.

Assim, o ligeiramente condescendente, mas também muito verdadeira resposta para o seu problema é que você precisa saber o que você está fazendo, em vez de apenas cutucando-o com uma vara até que tipo de aparência bem.

Eu recomendo o seguinte leitura:

Eu recomendo que você use UTF-8 para codificação interna e externa. Use o AddDefaultCharset directiva para dizer Apache sua codificação padrão:

AddDefaultCharset utf-8

Agora você só precisa garantir que você aplicativo trata os dados corretamente (veja default_charset directiva ). Se você usar UTF-8 para a sua saída, o cliente deve usar isso para outras solicitações (URLs, dados de formulários) também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top