好的,所以我正在使用 PHP 从网页中抓取一些数据,并以某种方式提取源文档中不存在的一些意外字符。我认为这是由于我解释了错误的字符编码,但我不确定如何解决这个问题
这是给我错误的 HTML 示例
<tr>
<td>Aug 2013</td>
<td>TEDxColbyCollege</td>
<td>
<a href="/talks/daniel_h_cohen_for_argument_s_sake.html">Daniel H. Cohen: For argument’s sake</a> </td>
.
.
.
// more of the table
现在,我在 db 中回显/存储的结果字符串如下所示:Daniel H. Cohen: For argumentâÂÂs sake
我正在使用以下代码加载 HTML 文档并抓取
$html = file_get_contents('url_of_html_page_being_scrapped');
$doc = new DOMDocument();
$doc->loadHTML($html);
$sxml = simplexml_import_dom($doc);
$table = $sxml->xpath('//table');
foreach($tbl->tr as $vid)
{
.
.
echo $vid->td[2]->a // line giving me the problem
.
.
}
文件头部指出
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
.
.
</head>
所以我假设我的方法没有正确解释字符集,尽管我不确定如何指定这个或者它是否是问题......而且似乎错误发生在值上:'
任何洞察正在发生的事情/如何我可以修复它会很棒,因为我不确定
更新在@Patrick Manser 的一些建议之后,我尝试了在 SO 其他地方找到的解决方案
主要是:
$html =stripslashes(mb_convert_encoding( file_get_contents('http://www.ted.com/talks/quick-list?sort=date&order=desc&page=1'), "HTML-ENTITIES", "UTF-8" ));
//AND
$html = mb_convert_encoding( file_get_contents('http://www.ted.com/talks/quick-list?sort=date&order=desc&page=1'), "HTML-ENTITIES", "UTF-8" );
两者都导致输出看起来像这样Daniel H. Cohen: For argument’s sake