Javascript HTTP_ACCEPT_语言与Linux下Firefox中的navigator.LANGUAGE不同
我正在Linux中的本地Apache2Web服务器上编程一些网页,我想使用PHP自动识别浏览器语言 在该网页中,我尝试使用JavaScript来Javascript HTTP_ACCEPT_语言与Linux下Firefox中的navigator.LANGUAGE不同,javascript,php,linux,firefox,Javascript,Php,Linux,Firefox,我正在Linux中的本地Apache2Web服务器上编程一些网页,我想使用PHP自动识别浏览器语言 在该网页中,我尝试使用JavaScript来console.log()了解客户端首选的语言,我得到了两种不同的输出: JavaScript(console.log(navigator.language);)返回es PHP()返回en-US,en;q=0.5 在about:config中,变量intl.accept\u languages设置为es-es,es,en-US,en 注意:我想获得
console.log()
了解客户端首选的语言,我得到了两种不同的输出:
- JavaScript(
)返回console.log(navigator.language);
es
- PHP(
)返回en-US,en;q=0.5
about:config
中,变量intl.accept\u languages
设置为es-es,es,en-US,en
注意:我想获得的本地语言是西班牙语(es
)
由于任何原因,Firefox似乎没有在我的Linux发行版(LinuxMint18.1)中正确配置,而我已经安装了所有东西(Firefox
和Firefox区域设置es
)
如果我在同一台计算机上尝试Chromium,PHP输出是es,es;q=0.8;q=0.6,这是正确的
如果我在其他有Windows的计算机上使用Firefox,甚至在Android上使用Firefox,PHP输出也是正确的:es,es;q=0.8;嗯我们,嗯,;q=0.5
为什么Firefox for Linux中的PHP输出错误?如何解决?提前谢谢
编辑:这些是HTTP头(我划掉了认证头)
请求:
GET / HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://localhost/
Cookie: PHPSESSID=crucsit7is3r6hvnd88k6q2rn5
Authorization: ########
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
答复:
HTTP/1.1 200 OK
Date: Tue, 25 Jul 2017 20:39:21 GMT
Server: Apache/2.4.18 (Ubuntu)
Authentication-Info: ########
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1301
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
事实上,我在睡觉的时候找到了一个解决办法,就因为Chrome做了几年前的事情
感谢@Pointy的帮助
因此,如果有人也有这个问题,以下是步骤:
在Firefox的配置面板中输入(搜索栏中的about:config
)
搜索intl.accept\u languages
变量
用以下格式的不同语言替换默认值:xx-xx,xx
,例如de-de,de
。最重要的是,这个变量必须将其状态从“默认”更改为“用户修改”状态
再次用正确的值替换其值:您自己的值+默认Firefox值,即es-es,es,en-US,en
(用您的值替换es-es,es
部分,例如,fr-fr,fr,en-US,en
)
应使用此配置重置HTTP标头
事实上,我在睡觉的时候找到了一个解决办法,就因为Chrome做了几年前的事情
感谢@Pointy的帮助
因此,如果有人也有这个问题,以下是步骤:
在Firefox的配置面板中输入(搜索栏中的about:config
)
搜索intl.accept\u languages
变量
用以下格式的不同语言替换默认值:xx-xx,xx
,例如de-de,de
。最重要的是,这个变量必须将其状态从“默认”更改为“用户修改”状态
再次用正确的值替换其值:您自己的值+默认Firefox值,即es-es,es,en-US,en
(用您的值替换es-es,es
部分,例如,fr-fr,fr,en-US,en
)
应使用此配置重置HTTP标头
HTTP头中到底发布了什么?@Pointy抱歉,我不明白你的问题。您想让我检查什么?使用浏览器开发人员工具查看实际的HTTP请求(和响应)标题是什么。@好吧,我在设置Linux Firefox时已在问题中发布了标题,因此我最喜欢的语言是西班牙语/西班牙语,我肯定会收到一个包含西班牙语的Accept Languages
标题。HTTP标题中实际上发布了什么内容?@Pointy抱歉,我不明白你的问题。您想让我检查什么?使用浏览器开发人员工具查看实际的HTTP请求(和响应)标题是什么。@好吧,我在设置Linux Firefox时已在问题中发布了标题,因此我最喜欢的语言是西班牙语/西班牙语,我肯定会得到一个包含西班牙语的Accept Languages
标题。