You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Curl请求Google SERP时编码异常(特殊字符变问号)如何解决?

解决Curl请求Google波兰站SERP的编码异常问题

首先看你这段代码里的几个关键问题,直接导致了ś这类特殊字符显示成问号:

问题分析

  • 用户代理设置错误:你用了CURLOPT_HEADER来设置浏览器标识,这完全不对!CURLOPT_HEADER是控制是否返回响应头的开关,设置User-Agent应该用CURLOPT_USERAGENT。
  • 未处理压缩响应:Google默认会返回gzip压缩的内容,不开启Curl的编码支持的话,拿到的是压缩后的乱码,转码自然会出错。
  • 缺少输出编码声明:即使拿到了正确内容,输出时如果不告诉浏览器用UTF-8解析,特殊字符也会显示异常。

修改后的完整代码

$url = "https://www.google.pl/search?q=agawa+korzenie&oq=agawa+korzenie";
$ch = curl_init();

// 正确设置用户代理,模拟浏览器请求
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_URL, $url);
// 开启自动处理gzip/deflate压缩,避免拿到乱码
curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate");
// 要求返回响应内容而非直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置请求头,明确告知服务器优先接受UTF-8编码内容
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset: UTF-8,*'
));

$icerik = curl_exec($ch);
curl_close($ch);

// 输出前强制声明页面编码为UTF-8,让浏览器正确解析
header('Content-Type: text/html; charset=UTF-8');
echo $icerik;

关键修改点说明

  • 替换CURLOPT_HEADER为CURLOPT_USERAGENT:正确模拟浏览器请求,避免Google返回非标准编码的内容。
  • 开启CURLOPT_ENCODING:让Curl自动解压Google返回的压缩内容,拿到原始的UTF-8文本。
  • 添加Accept-Charset请求头:明确告诉服务器我们优先接受UTF-8编码的响应,减少编码不匹配的概率。
  • 输出前设置header:强制浏览器用UTF-8解析页面,避免本地编码冲突导致特殊字符变成问号。

如果还是有异常,可以检查一下你的PHP文件本身是不是UTF-8编码(无BOM格式),有时候文件编码不对也会引发输出问题。

内容的提问来源于stack exchange,提问作者Sargit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:57:51