2016-06-28 3 views
0

증기 시장에서 가격을 가져 오려고합니다. 이제는이 모든 것이 잘 작동하고 배열을 반환하지만 한 가지 문제가 있습니다. CS는 : 스타 중 하나가 같은 StatTrak 항목이나 칼과 같은 항목을 GO ( 또는 밸브가 "\u2605"로 전송하는 방법) 또는 상표 로고 ( 또는 밸브를 전송하는 방법 "\u2122")이상한 문자가 나타납니다

에게 내 배열은 볼 수 없습니다 이러한 문자로하지만,이 대신로 변환 :

â StatTrak⢠Karambit | Damascus Steel (Field-Tested)

를하지만해야합니다 :

★ StatTrak™ Karambit | Damascus Steel (Field-Tested)

이 내가 정보를 가져 오는 방법은 다음과 같습니다 당연히, 루프에서

$url = "https://steamcommunity.com/market/search/render/?query=&start=0&count=99&&search_descriptions=0&sort_column=price&sort_dir=popular&appid=730&category_730_ItemSet%5B%5D=any&category_730_ProPlayer%5B%5D=any&category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any"; 
    $html = file_get_contents($url); 
    $html = json_decode($html, true); 
    $html = $html['results_html']; 

    $dom = new DOMDocument; 
    @$dom->loadHTML($html); 
    $xpath = new DOMXpath($dom); 
    $itemname = $xpath->query('//span[@id="result_' . $q . '_name"]'); 
    $itemprice = $xpath->query('//*[@id="result_' . $q . '"]/div[1]/div[2]/span[1]/span[1]'); 

을,하지만 그건 문제가 지금해야하지. $q은 0-99입니다.

적절한 문자로 내용을 가져 오는 방법은 무엇입니까?

+3

이것은 하나의 인코딩에 저장되고 다른 인코딩을 사용하여 표시되는 문자 인 모기 베크의 고전적인 사례처럼 보입니다. 페이지의 문자 인코딩이 올바르게 설정되어 있는지 확인하십시오. 아마도 UTF-8을 사용해야합니다. HTML의 ''섹션에서''을 사용하여이를 수행 할 수 있습니다. –

+0

@DaanWilmer 여러분의 반응에 감사 드리며 다음과 같이하면 해결되었습니다 :'$ html = mb_convert_encoding ($ html, 'HTML-ENTITIES', 'UTF-8');' –

답변

0

특수 문자를 원래 문자로 바꾸려면 다음 코드를 사용하십시오.

$itemprice = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>', '<p>&Acirc;&nbsp;</p>', '&amp;quot;', '&Acirc;&nbsp;'), array('', '', '', '', '', '"',''), $dom->saveHTML())); 

보기 페이지 소스와 다시 그런 다음, 원래 문자로 대체됩니다 내용을 확인 str_replace()를 사용하여 원래 문자로 교체합니다.