PHP CURL 返回的文本被 utf-8 希腊语损坏

标签 php curl utf-8

我有一个关于 PHP、CURL 和 UT-8 希腊字符的问题。

我尝试从网站(特别是博客)检索一些文本,但是当我阅读检索到的文本时,它已损坏。它显示类似Î ÏκοÏÏÏ ÏÎ¿Ï ÏÏÏÏο另一方面,英文字符显示得很好。

网站的字符集是“UTF-8”,我的脚本中的字符集也是如此。

我对 CURL 使用以下设置。

$ch = curl_init();
$useragent='Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2';
$header = array('Accept-Charset: UTF-8');

curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);    

我使用 Xpath 查询 $res=$xp->query("...") 来查找文本的位置。

然后我采用这样的文本:

foreach($res as $text_result)
    $texter=trim($text_result->nodeValue);

我使用 mb_detect_encoding 检查了返回的文本字符集及其正确的“UTF-8”。

该脚本在大多数网站上都能正确运行,但在其中两个网站上失败。
我不知道可能是什么问题。

有人有想法吗?
提前谢谢大家。

更新

我通过添加以下内容修复了错误:

$doc->loadHTML('<?xml encoding="UTF-8">' . $html);

但是现在,当我将文本插入数据库时​​,它们仍然损坏。在我的电脑(easyphp)中同样工作正常。

我在 000webhost 拥有一个免费主机。

最佳答案

我找到了解决方案。

我必须转换 html 实体编码,方法是:

@$dom->loadHTML(mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8'));

此处给出了解决方案:solution

关于PHP CURL 返回的文本被 utf-8 希腊语损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12492834/

相关文章:

php - 查询更新不起作用

linux - 如何在 Bash for 循环中同时访问两个数组索引以获取 curl 请求?

linux - curl命令有时没有响应输出,有时有?

json - 在 shell 中处理 json 时,如何正确地将多个 jq 语句链接在一起,例如使用 curl?

r - 在 R 文本挖掘中从文本语料库中删除 "english"停用词时 UTF-8 无效

java - 使用java编码的json字符串无法使用php解码

php - 从三重内连接获得正确的结果

php - PDO 和 Singleton 类的数据库连接

java - 处理域名中的特殊字符(没有 IDN)?

php - OpenCart 用户数据库 [BLOB - 198B]