YQL и cURL - символы кавычек не возвращаются должным образом - PullRequest
2 голосов
/ 24 июня 2010

Я использую 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, и что мне нужно сделать, чтобы ее исправить?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Это звучит как проблема кодировки символов. Сайт, который вы копируете, может устанавливать набор символов, используя метатег в элементе head вместо настройки сервера для правильной идентификации кодировки символов в заголовке http. Найдите кодировку символов, используемую сайтом (вы должны найти ее в меню просмотра вашего браузера) и добавьте ключ charset в свой запрос YQL.

Пример из руководства по YQL:

select * from html where url='http://example.com' and charset='iso-8559-1' 
0 голосов
/ 29 июля 2012

Исходные страницы обслуживаются IIS и ASP. В итоге мне пришлось выполнить простой поиск и заменить, например:

str_ireplace(chr(145), chr(39), $html)
...