codificação de caracteres parece funcionar em um servidor MAMP, mas não em um servidor WAMP
-
23-08-2019 - |
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?
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.