Php 读取Google提要/警报时UTF-8编码已损坏

Php 读取Google提要/警报时UTF-8编码已损坏,php,utf-8,character-encoding,google-api,google-alerts,Php,Utf 8,Character Encoding,Google Api,Google Alerts,每当我尝试通过PHP阅读Google警报时,使用以下内容: $feed = file_get_contents("http://www.google.com/alerts/feeds/01445174399729103044/950192755411504138"); 无论我是将$feed保存到文件中,还是将结果回显到输出中,所有utf-8unicode字符(即带有变音符号的字符)都用空格表示。我尝试了以下各种组合,但没有成功: utf8\u编码 utf8\u解码 iconv mb\u co

每当我尝试通过PHP阅读Google警报时,使用以下内容:

$feed = file_get_contents("http://www.google.com/alerts/feeds/01445174399729103044/950192755411504138");
无论我是将
$feed
保存到文件中,还是将
结果回显到输出中,所有
utf-8
unicode字符(即带有变音符号的字符)都用空格表示。我尝试了以下各种组合,但没有成功:

  • utf8\u编码
  • utf8\u解码
  • iconv
  • mb\u convert\u编码

我认为错误的字符来自流,但我迷路了,因为如果我在浏览器中尝试这个URI,那么一切都很好。有人能解释一下这个问题吗?

对不起,你说得绝对正确-那里发生了一些不愉快的事情!虽然这不是你第一次怀疑的。。。鉴于:

echo mb_detect_编码($feed);//打印:ASCII
在远程服务器发送unicode数据之前,unicode数据就丢失了。Google似乎正在查看请求头中的
用户代理
字符串。默认情况下,在没有流上下文的情况下,使用
file\u get\u contents
不存在该字符串

因为它无法识别发出请求的客户机,所以它默认为并强制编码。这大概是在发生某种灾难性事故时的一种必要的退路。[需要引用…]

不过,命名应用程序还不够简单,还需要包含一个已知的供应商。我不确定这个问题的全部范围,但我相信大多数人都会使用“Mozilla[版本]”来解决这个问题,例如:

$url='1!'http://www.google.com/...';
$feed=file\u get\u contents($url,false,stream\u context\u create)([
“http'=>[
'方法'=>'获取',
'header'=>'接受字符集:UTF-8'。\r\n
.“用户代理:(Mozilla/5.0兼容)MyFeedReader/1.0”
]
]));
文件内容('test.txt',$feed);//现在应该像预期的那样工作了

提要已经
utf-8
编码了,什么?流来自谷歌。我将字符串($feed)作为纯文本文件直接保存到磁盘。没有剩下utf8字符。我在不同的服务器上试过。请也试试。谢谢。不清楚你想做什么?如果只是逐字复制提要并将结果转储到文件中,则不需要对字符串执行任何操作。PHP不会关心那些仅仅是“通过”的数据——这听起来更像是你在以后查看文本文件时遇到了问题。编码和解码是解决这个问题的不顾一切的尝试。我使用编码文本编辑器来查看文件。你也试过了吗?我将非常感激。你是一个英雄!非常感谢。:)