繁体   English   中英

使用 PHP 和 Curl 发送 GET 请求输出问号

[英]Sending a GET request using PHP and Curl outputs Question marks

我认为这是一个编码问题,我尝试了我能想到的一切。 这是我的简单代码

$curl = curl_init();
curl_setopt_array($curl, [
  CURLOPT_URL => "https://theatrevazrajdane.bg/%D1%82%D0%B2%D0%BE%D1%80%D1%87%D0%B5%D1%81%D0%BA%D0%B8-%D1%81%D1%8A%D1%81%D1%82%D0%B0%D0%B2/%D0%B0%D0%BA%D1%82%D1%8C%D0%BE%D1%80%D0%B8/2",
  CURLOPT_RETURNTRANSFER => true,
  // CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: text/html; charset=UTF-8"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

到目前为止,我绑:

  • 使用和不使用 CURLOPT_ENCODING 参数发送它
  • 发送有无“Content-Type: text/html; charset=UTF-8”

使用以下参数从 Insomnia 发送它就可以了。

curl --request GET \
  --url https://theatrevazrajdane.bg/%D1%82%D0%B2%D0%BE%D1%80%D1%87%D0%B5%D1%81%D0%BA%D0%B8-%D1%81%D1%8A%D1%81%D1%82%D0%B0%D0%B2/%D0%B0%D0%BA%D1%82%D1%8C%D0%BE%D1%80%D0%B8/2 \
  --header 'Accept: application/json' \
  --header 'Content-Type: text/html; charset=UTF-8'

例如,从 Insomnia 我得到页面的标题为<title>Актьори | Театър Възраждане</title> <title>Актьори | Театър Възраждане</title> ,但是使用 cURL 从 PHP 发送这个我得到<title>������� | ������ ����������</title> <title>������� | ������ ����������</title>

查看您提到的网站的Content-Type标头:

Content-Type: text/html; charset=windows-1251;

这是返回字符串的编码: windows-1251

当您将自己的内容返回到浏览器时,要么给出这个,要么:

  1. 使用iconv将编码转换为 UTF-8:
$convertedResponse = iconv('Windows-1251', 'UTF-8', $response);
  1. 使用mb_convert_encoding将编码转换为 UTF-8:
$convertedResponse = mb_convert_encoding($response, 'UTF-8', 'Windows-1251');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM