php网页抓取乱码(不是白忙乎了吗?????)
优采云 发布时间: 2022-02-24 16:12php网页抓取乱码(不是白忙乎了吗?????)
网上的解决方案说抓取后使用iconv()转码。看了之后觉得不对:一个是iconv库不一定是编译出来的,更大的问题是编码和流转换有关(如果用iconv,php实际上是把代码转换了两次:stream -> UTF-8 -> GB2312):这不是浪费时间吗?
仔细阅读php文档(不知道大家是怎么写代码的,但是文档很清楚),上面提到了关于fopen()和file_get_contents()“默认是UTF-8,但是用户可以使用stream_default_encoding。 () 或用户定义的上下文属性来更改编码”(如果启用了 unicode 语义,则读取数据的默认编码为 UTF-8. 您可以通过创建自定义上下文或更改默认使用 stream_default_encoding()。)。所以使用 stream_default_encoding('gb2312'); 测试:但问题是这个函数不存在?!似乎只有 php 6 支持它。但是没有出路,还有“用户定义的上下文属性”可以使用。
再仔细看了下文档,终于解决了问题:
复制代码代码如下:
//设置流的编码格式,这里是文件流(file),如果是网络访问,把文件改成http
$opts = array('file' => array('encoding' => 'gb2312'));
$ctxt = stream_context_create($opts);
file_get_contents(文件名, FILE_TEXT, $ctxt);