2016-06-28 5 views
0

蒸気市場から価格を取得しようとしていますが、これはすべてうまく動作し、配列を返していますが、問題が1つあります。 CS:私の配列が表示されません 奇妙な文字が表示されます

などのStatTrakアイテムやナイフなどの項目がスター( またはどのようにバルブが「 \u2605 『を送信)または商標ロゴ( またはどのようにバルブが』 \u2122」を送信)のいずれかを持ってGOこれらの文字、それらが、この代わりに変換:

â 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

これは、Mojibakeの古典的なケースのようです。文字は1つのエンコーディングに格納され、別のエンコーディングを使用して表示されます。ページの文字エンコーディングが正しく設定されていることを確認してください。おそらく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()を使用して、元の文字に置き換えます。

関連する問題