每当我尝试使用以下内容通过 PHP 阅读Google提醒时
$feed = file_get_contents("http://www.google.com/alerts/feeds/01445174399729103044/950192755411504138");
无论是将$feed
保存到文件还是将结果echo
保存到输出,所有utf-8
unicode字符( 即 具有变音符号的那些由空格表示。我尝试过 - 没有成功 - 各种组合:
utf8_encode
utf8_decode
iconv
mb_convert_encoding
我认为错误的字符来自流,但我输了,因为如果我在浏览器中尝试这个 URI ,那么一切都很好。任何人都可以对这个问题有所了解吗?
答案 0 :(得分:0)
抱歉,您完全正确 - 发生了一些不幸事件!虽然这不是你首先怀疑的......作为参考,鉴于:
echo mb_detect_encoding($feed); // prints: ASCII
unicode数据在被远程服务器发送之前丢失 - 看来Google正在查看请求标头中的user-agent
字符串 - 这是不存在的默认情况下file_get_contents
没有流上下文。
因为它无法识别发出请求的客户端,所以默认为强制ASCII编码。如果出现某种灾难性的翘起,这可能是必要的后备。 [citation needed ...]
仅仅为您的应用命名并不够,但您需要包含一个已知的供应商。我不确定这个问题的全部内容,但我相信大多数人都会使用“Mozilla [version] 来解决这个问题,例如:
$url = 'http://www.google.com/...';
$feed = file_get_contents($url, false, stream_context_create([
'http' => [
'method' => 'GET',
'header' => 'Accept-Charset: UTF-8' ."\r\n"
.'User-Agent: (Mozilla/5.0 compatible) MyFeedReader/1.0'
]
]));
file_put_contents('test.txt', $feed); // should now work as expected