2

我对 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 拥有一个免费主机。

4

1 回答 1

2

我找到了解决方案。

我必须通过以下方式转换 html 实体编码:

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

这里给出了解决方案:解决方案

于 2012-10-04T14:40:32.400 回答