わかりましたので、PHP を使用して Web ページからデータをスクレイピングし、ソース ドキュメントに存在しない予期しない文字を何らかの方法で取得しています。これは、問題の解決方法が不明ですが、間違った文字エンコーディングを解釈したことが原因であると思います
これは私にエラーを与える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