我正在使用YQL进行一些屏幕抓取,并且任何类似报价的字符都没有正确返回。
例如,正在抓取的页面上的标记是:
There should not be a “split between what we think and what we do,”
这是由YQL返回的:
There should not be a �split between what we think and what we do,�
这也发生在蜱和反蜱上。
我的JS就像:
var qurlString = '&url=' + encodeURIComponent(url);
$.ajax({
type: "POST",
url: "/k_sys/qurl.php",
datatype: "xml",
data: qurlString,
success: function(data) {
//do something
}
});
我的qurl.php就像:
$BASE_URL = "http://query.yahooapis.com/v1/public/yql";
$url = my scraped site url;
$yql_query = "select * from html where url='$url'";
$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=xml";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
$xml = curl_exec($session);
echo $xml;
这是一个cURL问题还是YQL问题,我需要做些什么来解决它?
谢谢!
答案 0 :(得分:1)
这听起来像个字符编码问题。您正在抓取的站点可能是使用head元素中的元标记设置字符集,而不是配置服务器以正确识别http标头中的字符编码。找出网站使用的字符编码(您应该可以在浏览器的视图菜单中找到它)并将charset密钥添加到YQL查询中。
YQL指南中的示例:
select * from html where url='http://example.com' and charset='iso-8559-1'
答案 1 :(得分:0)
源页面由IIS和ASP提供。我最终不得不进行简单的搜索并替换为:
str_ireplace(chr(145), chr(39), $html)