php curl 爬取网页内容出现中文乱码的解决方案
问题描述
使用 PHP 的 curl 类库爬虫网页,需要根据网页源代码的编码进行分析,编码格式如 utf-8、gbk/gb2312 等。以下是使用 get 请求获取中关村的一个网页内容,因为其页面的编码是 gbk,出现了文字乱码,内容所下所示。
<html>
<head>
<meta charset="gbk">
<meta charset="GBK" />
<title>����ΪP40 8GB/128GB/ȫ��ͨ/5G���������Ϊ P40 8GB/128GB/ȫ��ͨ/5G���ֻ�����_���_����_����-ZOL�йش�����</title>
<meta name="keywords" content="P40 8GB/128GB/ȫ��ͨ/5G�����,��ΪP40 8GB/128GB/ȫ��ͨ/5G�����,��ΪP40 8GB/128GB/ȫ��ͨ/5G����,��ΪP40 8GB/128GB/ȫ��ͨ/5G������,��ΪP40 8GB/128GB/ȫ��ͨ/5G�湦��" />
<meta name="description" content="ZOL�йش�����ΪP40 8GB/128GB/ȫ��ͨ/5G���ֻ������ṩ��ȫ�Ļ�ΪP40 8GB/128GB/ȫ��ͨ/5G���������ΪP40 8GB/128GB/ȫ��ͨ/5G���?�ΪP40 8GB/128GB/ȫ��ͨ/5G�����ܡ���ΪP40 8GB/128GB/ȫ��ͨ/5G�湦�ܽ���,Ϊ������ΪP40 8GB/128GB/ȫ��ͨ/5G���ֻ��ṩ�м�ֵ�IJο�" />
解决方法
参考 mb_convert_encoding 方法,转换字符的编码,需要安装 mbstring 支持,编译 PHP 的时候指定 --enable-mbstring
。可以将 gbk 和 utf-8 等编码格式相互转换,支持的字符编码。
$url = "http://detail.zol.com.cn/1317/1316635/param.shtml";
$curl = curl_init();
// 省略 curl设置
...
$html = curl_exec($curl);
$utf8Body = mb_convert_encoding($html, 'utf-8','GBk');
将抓取的内容转码后,结果就正常了。
<html>
<head>
<meta charset="gbk">
<meta charset="GBK" />
<title>【华为P40 8GB/128GB/全网通/5G版参数】华为 P40 8GB/128GB/全网通/5G版手机参数_规格_性能_功能-ZOL中关村在线</title>
<meta name="keywords" content="P40 8GB/128GB/全网通/5G版参数,华为P40 8GB/128GB/全网通/5G版参数,华为P40 8GB/128GB/全网通/5G版规格,华为P40 8GB/128GB/全网通/5G版性能,华为P40 8GB/128GB/全网通/5G版功能" />
<meta name="description" content="ZOL中关村在线华为P40 8GB/128GB/全网通/5G版手机参数提供最全的华为P40 8GB/128GB/全网通/5G版参数、华为P40 8GB/128GB/全网通/5G版规格、华为P40 8GB/128GB/全网通/5G版性能、华为P40 8GB/128GB/全网通/5G版功能介绍,为您购买华为P40 8GB/128GB/全网通/5G版手机提供有价值的参考" />
非特殊说明,本网站所有文章均为原创。如若转载,请注明出处:https://mip.cpming.top/p/php-curl-gbk-utf8