O problema
Estou usando apache_note()
do PHP para registrar variáveis de solicitações da Web para um formato CustomLog. No entanto, por mais que eu tente, o Apache não quer registrar os caracteres UTF-8 do jeito que eu gostaria.
No PHP, eu tenho apache_note('some_value', '✔');
que corresponde à configuração do VHost que se parece com isso:
LogFormat "%{some_value}n" custom_format
CustomLog ${APACHE_LOG_DIR}/access.log custom_format
No entanto, o Apache acaba registrando a versão literal assim:
\xe2\x9c\x94
O que eu tentei
- Verificou os valores de ambos os
LANG
e LC_ALL
e ambos estão definidos para en_US.UTF-8
- Atualizado
/etc/apache2/envvars
para usar /etc/default/locale
por padrão
- Usando o mod_charset_lite, defini
CharsetSourceEnc UTF8
e
CharsetDefault UTF8
na configuração do Apache para o site (eu sei que isso é para conteúdo dentro / fora)
- Verificou se o /etc/apache2/conf.d/charset definiu
AddDefaultCharset UTF-8
- Tentei enviar a saída de log através de um log canalizado para outro programa - seu
\xe2\x9c\x94
no momento em que chega lá, então certamente parece que tem algo a ver com o próprio processo do Apache.
- Leia o o Apache registra os documentos
Por fim, quero que o log de acesso mostre algo como:
✔
mas eu estou puxando meu cabelo tentando chegar lá.
Outras informações
- Apache versão 2.4.10
- Debian 8.4
Atualizar
Por sugestão de Per Esa, eu modifiquei a diretiva LogFormat
:
LogFormat "%{some_value}n ✔" custom_format
E recebo o seguinte:
\xe2\x9c\x94 ✔
O que é interessante, porque sugere a disposição do Apache para registrar o UTF-8. No entanto, ainda não estou convencido de que o problema tenha algo a ver com o PHP passar valores não UTF-8.
apache_note('some_value', '✔');
$value = apache_note('some_value');
print_r($value);
no PHP ainda imprime
Vou tentar recompilar o Apache para ver se ele ajuda, mas eu preciso disso na produção, que pode ser arriscada.