Php 从服务器获取文件时,unicode错误

Php 从服务器获取文件时,unicode错误,php,unicode,utf-8,Php,Unicode,Utf 8,我想通过php从谷歌下载哪个mage txt文件 当我使用浏览器时,unicode是正确的,所有的事情都是正确的,但是当我使用curl或file\u get\u content时,它包含错误的字母表。 区别是什么?我应该如何解决 由brower下载 [[["سلام","hello","",""]],[["interjection",["سلام","هالو","الو"],[["سلام",["hello","hi","aloha","all hail"]],["هالو",["hallo"

我想通过php从谷歌下载哪个mage txt文件

当我使用浏览器时,unicode是正确的,所有的事情都是正确的,但是当我使用
curl
file\u get\u content
时,它包含错误的字母表。 区别是什么?我应该如何解决

由brower下载

[[["سلام","hello","",""]],[["interjection",["سلام","هالو","الو"],[["سلام",["hello","hi","aloha","all hail"]],["هالو",["hallo","hello","halloo"]],["الو",["hello"]]]]],"en",,[["سلام",[5],0,0,1000,0,1,0]],[["hello",4,,,""],["hello",5,[["سلام",1000,0,0],["خوش",0,0,0],["میهمان گرامی",0,0,0],["خوش آمدید",0,0,0],["درود کاربر",0,0,0]],[[0,5]],"hello"]],,,[["en"]],65] 除了除了除了除了除了除了除了除了除了除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外外“你好”,4[“0,0,0”,“0,0],[0,0,0],[0,5],[hello”],[en”],[65] 通过以下php脚本下载:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
$t = file_get_contents("http://translate.google.com/translate_a/t?client=t&hl=en&sl=auto&tl=fa&multires=1&prev=btn&ssel=0&tsel=3&uptl=fa&alttl=en&sc=1&text=hello");
$f = fopen("t.txt", "w+");
fwrite($f, $t);
fclose($f);
?>
</body></html>

[[[[[[[[[[[2111切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切切ã“,1000,0,0],“ÎæÔ”,0,0,0],“ãu06CCåãããããããããããã227[0,0,0]、[0,0]、[0,0]、[0,0]、[0,0]、[0,5]、[hello”]、[en”]、[4]
标题:

Header are: HTTP/1.1 200 OK Pragma: no-cache Date: Fri, 25 May 2012 22:29:12 GMT Expires: Fri, 25 May 2012 22:29:12 GMT Cache-Control: private, max-age=600 Content-Type: text/javascript; charset=UTF-8 Content-Language: fa Set-Cookie: PREF=ID=b6c08a0545f50594:TM=1337984952:LM=1337984952:S=Sf1xcow2qPZrFeu0; expires=Sun, 25-May-2014 22:29:12 GMT; path=/; domain=.google.com X-Content-Type-Options: nosniff Content-Disposition: attachment Server: HTTP server (unknown) X-XSS-Protection: 1; mode=block Transfer-Encoding: chunked 标题为: HTTP/1.1200ok Pragma:没有缓存 日期:2012年5月25日星期五格林尼治标准时间22:29:12 到期时间:2012年5月25日星期五格林尼治标准时间22:29:12 缓存控制:专用,最大使用年限=600 内容类型:text/javascript;字符集=UTF-8 内容语言:fa Set Cookie:PREF=ID=b6c08a0545f50594:TM=1337984952:LM=1337984952:S=Sf1xcow2qPZrFeu0;expires=Sun,2014年5月25日22:29:12 GMT;path=/;domain=.google.com X-Content-Type-Options:nosniff 内容配置:附件 服务器:HTTP服务器(未知) X-XSS-保护:1;模式=块
传输编码:chunked这对我来说很有用,因为我正要把很多代码扔进垃圾箱!也许它也会对你有所帮助

iconv( 'CP1252', 'UTF-8', $string); 

这曾经对我有用,因为我正要把很多代码扔进垃圾桶!也许它也会对你有帮助

iconv( 'CP1252', 'UTF-8', $string); 

echo
将您从
文件获取的内容
导入PHP输出应该可以正常工作,因为您正在从UTF-8 JSON响应转换为UTF-8 HTML响应。在给定URL之外对我有效

当您存储到文件时,您必须担心用于读取文件的工具使用的是什么编码。只要您在其中查看文件的文本编辑器知道输出是UTF-8,就可以编写。在Windows上,记事本可能会尝试使用依赖于语言环境的默认值(“ANSI”)读取该文件代码页,它不会是UTF-8。在西欧安装时,它会是代码页1252,您会得到类似于
的输出

(一种解决方法是在文件的前面放置一个UTF-8伪BOM,并使用
fwrite($f,“\xef\xbb\xbf”);
。这有点狡猾,因为UTF-8不需要字节顺序标记(其字节顺序是固定的)它打破了UTF-8的ASCII兼容性,但Windows工具像假BOM。另一种解决方法是获得更好的文本编辑器,允许您默认以UTF-8处理文件。)

这里有一些稍微不同的地方,因为在Windows默认阿拉伯语编码(代码页1256)中保存
سلام
,然后在Windows默认西方编码(代码页1252)中读取时,会得到
.这意味着在测试过程中会涉及一些额外的存储和加载步骤,这会弄乱编码


如果这与Windows命令行工具有关,那么您最好放弃,因为命令提示符和MSVCRT应用程序与Unicode根本不兼容。

echo
将您从
文件获取的内容
导入PHP输出应该可以正常工作,因为您将从UTF-8 JSON响应转换为UTF-8 HTML response.在给定的URL之外为我工作

当您存储到文件时,您必须担心用于读取文件的工具使用的是什么编码。只要您在其中查看文件的文本编辑器知道输出是UTF-8,就可以编写。在Windows上,记事本可能会尝试使用依赖于语言环境的默认值(“ANSI”)读取该文件代码页,它不会是UTF-8。在西欧安装时,它会是代码页1252,您会得到类似于
的输出

(一种解决方法是在文件的前面放置一个UTF-8伪BOM,并使用
fwrite($f,“\xef\xbb\xbf”);
。这有点狡猾,因为UTF-8不需要字节顺序标记(其字节顺序是固定的)它打破了UTF-8的ASCII兼容性,但Windows工具像假BOM。另一种解决方法是获得更好的文本编辑器,允许您默认以UTF-8处理文件。)

这里有一些稍微不同的地方,因为在Windows默认阿拉伯语编码(代码页1256)中保存
سلام
,然后在Windows默认西方编码(代码页1252)中读取时,会得到
.这意味着在测试过程中会涉及一些额外的存储和加载步骤,这会弄乱编码


如果这与Windows命令行工具有关,您最好放弃,因为命令提示符和MSVCRT应用程序与Unicode根本不兼容。

添加参数
ie=UTF-8
oe=UTF-8
,以查询url字符串:

$t = file_get_contents("http://translate.google.com/translate_a/t?ie=UTF-8&oe=UTF-8&client=t&hl=en&sl=auto&tl=fa&multires=1&prev=btn&ssel=0&tsel=3&uptl=fa&alttl=en&sc=1&text=hello");

将参数
ie=UTF-8
oe=UTF-8
添加到url的查询字符串中:

$t = file_get_contents("http://translate.google.com/translate_a/t?ie=UTF-8&oe=UTF-8&client=t&hl=en&sl=auto&tl=fa&multires=1&prev=btn&ssel=0&tsel=3&uptl=fa&alttl=en&sc=1&text=hello");

在执行
curl
请求时,是否传递了任何
Accept:
Accept Charset:
标题?我尝试了这两个标题(发送utf8或空白),但问题仍然存在。在执行
curl
请求时,是否传递了任何
Accept:
Accept Charset:
标题?我尝试了这两个标题(发送utf8或空白),但问题仍然存在。