编码:通过cURL请求返回的某些字符被破坏


Encoding: certain characters coming back wrecked through cURL request?

我有一个PHP驱动的RSS提要缓存系统。如果提要包含某些字符,例如大引号/撇号,则这些字符会在破坏的cURL响应中返回。

示例提要:http://www.theguardian.com/football/hullcity/rss(注意卷曲撇号)

cURL代码:

$ch = curl_init($url);
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => CURL_CONNECT_TIMEOUT
));

结果数据(摘录自):

Sergio Agüero is firing again, José Mourinho’s propaganda ...

我是否应该配置一些cURL选项,或者我别无选择,只能在cURL完成后字符串处理这些选项?

我知道有一个cURL选项CURLOPT_ENCODING,但据我所知,这是关于编码发送的数据,而不是检索的数据。

处理提要中的编码很难。您必须首先确定提要的文本使用哪种编码,然后将其转换为要显示的任何编码。

要确定编码,您需要在两个不同的地方进行两次查找:

  • HTTP标头
  • XML声明

Feedparser的文档是关于如何处理这一问题的最明确的文档。你也可以使用像Superfeeder这样的服务,它将为你处理UTF-8的转换!