我有一个关于 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/