2015-04-23 3 views
4

Я пытаюсь очистить информацию с сайта.Проблема с шрифтом или Unicode на скребке

Сайт имеет как этот

127 East Zhongshan No 2 Rd; 中山东二路127号 

Но когда я пытаюсь ломом это & эхо его, то он будет показывать

127 East Zhongshan No 2 Rd; 中山ä¸äºè·¯127å· 

Я также попробовать UTF-8

Существует мой php code

сейчас, пожалуйста, помогите мне решить эту проблему.

function GrabPage($site){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 40); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 
    curl_setopt($ch, CURLOPT_URL, $site); 
    ob_start(); 
    return curl_exec ($ch); 
    ob_end_clean(); 
    curl_close ($ch); 
} 
$GrabData = GrabPage($site); 

$dom = new DOMDocument(); 
@$dom->loadHTML($GrabData); 

$xpath = new DOMXpath($dom); 


$mainElements = array(); 
$mainElements = $xpath->query("//div[@class='col--one-whole mv--col--one-half wv--col--one-whole'][1]/dl/dt"); 

foreach ($mainElements as $Names2) { 
    $Name2 = $Names2->nodeValue; 
    echo "$Name2"; 
} 
+0

Это сайт URL: http://www.lonelyplanet.com/china/shanghai/transport/transportation-travel- services/jinling-road-ferry –

+0

loadHTML ожидает кодированные данные Latin-1, см. [PHP DomDocument, неспособный обрабатывать символы utf-8 (☆)] (http://stackoverflow.com/q/11309194/367456) для деталей. – hakre

+0

У вас есть документ HTML 5+ с тегом ''. Кажется, что этот тег не лжет о кодировке файла, так что это * UTF-8 *. Кодировка по умолчанию в HTML 0-4.x - это * ISO-8895-1 *. ** DOMDocument ** в PHP ожидает HTML 4.1. – hakre

ответ

1

Во-первых, вам необходимо установить кодировку, прежде чем что-либо еще на вершине PHP файла:

header('Content-Type: text/html; charset=utf-8'); 

Вам необходимо преобразовать HTML-разметку вы получили с mb_convert_encoding:

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

Sample Output

+0

many many Спасибо –

+0

@FerozAhmed конечно рад, что это помогло – Ghost

0

Первое, что нужно знать, правильно ли захвачен исходный HTML-источник закодирован. Если да попробовать

utf8_decode($Name2) 

Это должно получить строку готовы к экономии, а также печать

+0

Вы тоже правы. Благодарю. –

+0

Этот метод приведет к потере данных. Ответ не является хорошим предложением. – hakre

+1

@FerozAhmed Gald, что это помогло .. !! –