我已经创建了两个文件,一个在我的wamp服务器(localhost)上,另一个在我的ovh.com私人空间上。两个文件只包含以下内容:
echo $search = file_get_contents('https://prod.api.pvp.net/api/lol/euw/v1.3/game/by-summoner/19319907/recent?api_key=6fa73a35-6477-412d-97a6-b6739cb6cf1b');
在我的服务器上,有一些错误的字符,如
它是如何发生的,我该如何解决这个问题?
编辑:这不是关于文件!这是关于服务器的,因为文件是完全一样的!你可以在这里查看好的:http://www.dietadom.fr/test.php,坏的在这里:http://82.124.50.144/test.php
从请求到这两个脚本的头:
工作:
curl -I http://www.dietadom.fr/test.php
HTTP/1.1 200 OK
Set-Cookie: clusterBAK=R1564861669; path=/; expires=Wed, 19-Mar-2014 16:38:43 GMT
Date: Wed, 19 Mar 2014 15:19:31 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: cluster=R1649376954; path=/; expires=Wed, 19-Mar-2014 16:32:22 GMT
Server: Apache
X-Powered-By: PHP/5.4.24
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Vary: Accept-Encoding
不工作:
curl -I http://82.124.50.144/test.php
HTTP/1.1 200 OK
Date: Wed, 19 Mar 2014 15:19:48 GMT
Server: Apache/2.4.4 (Win64) OpenSSL/1.0.1d PHP/5.4.12
X-Powered-By: PHP/5.4.12
Content-Type: text/plain; charset: UTF-8
两个服务器提供的默认字符编码头很可能是不同的。您可以通过更改服务器配置来解决这个问题,以确保它们都具有默认值。或者您可以修改您的脚本来覆盖这一点,添加一个内容编码头将使其一致。
如果您为UTF-8纯测试内容修改PHP文件,该行将是
header('Content-type: text/plain; charset=UTF-8');
您的源URL响应为:
Content-Type: application/json; charset=UTF-8
使用 检索
curl -I https://prod.api.pvp.net/api/lol/euw/v1.3/game/by-summoner/19319907/recent?api_key=6fa73a35-6477-412d-97a6-b6739cb6cf1b
因此我知道它是UTF-8编码的。
编辑
检查了您的服务器后,我可以看到错误页的标头:
curl -I http://82.124.50.144/404.html
HTTP/1.1 403 Forbidden
Date: Wed, 19 Mar 2014 17:24:17 GMT
Server: Apache/2.4.4 (Win64) OpenSSL/1.0.1d PHP/5.4.12
Content-Type: text/html; charset=iso-8859-1
最后一行显示了默认的字符编码是iso-8859-1,这意味着来自源的utf-8
数据正在以错误的编码传输。在脚本中添加正确的标题行应该可以解决这个问题。
您可以通过添加AddDefaultCharset UTF-8
来更改apache服务器配置。
我相信你的问题是字符编码,所以你应该看看。