file_get_contents返回一些维基百科页面的奇怪字符,为什么?

时间:2013-03-23 22:52:27

标签: php file-get-contents

我已经完成了大部分解决方案,但它们都没有用。

我尝试使用file_get_contents解析维基百科页面,但返回根据我尚未弄清楚的页面中的内容而有所不同。

例如,当我将它与此页面一起使用时,http://en.wikipedia.org/wiki/Word它可以正常工作,但当我在此页http://en.wikipedia.org/wiki/David_A._Kolb中使用它时,它会返回strage字符..

我猜这两页都是一样的。

可能是什么问题?

更新1

这是我得到的:

î²$'ˆ‰ÃBÿ—¾XP·o€Ô%4aºäÇ$ÊãÔ¼s¾w>ÈÙfb%¾ “p£+Ïü J£x&6ç>vŸŠ$B­fbðzÊ~ì𥳈è`lƒW{·²±Ÿd³žç"U™ðrÉ¥ý4Ê'ú™,N—î, ¢©ª3/U+þÔGQãDý|A*¬iœø=céOy(èO€O‡ù4O3ø Ãvi_éÉ_/£K]x¢‘~~(Cp†(Q€!A£Ë±í‘åÀr\9¨N%G‘¼¸äav-ÍÁÖe€.ˆK¨È*Å/`ºøÏÄRž„¸ÔÞɉœÁ'PQ‚€Ç©Å!¿Ô$g•f|œêbT-< ŸLÑUÌ` ¡Òâ4–L¢0Èv'Ö­SA€a?(Ù œ‚n÷ç€Pj°Ï4ê18·&À3þcXfÕ3pb éÌ:õ ”š˜egfTCã¦$Nñ˜Êó1õ^”æãÀO‹¹f‘«~Ø€Ø.°ñéyt!kñí­½ÉXôzÀåºÛ»Û[wl¹Ûã‡{Ûn¿+·S1½§ ráõËàEs?EÆIó哬Äè  3e,™K´Ô€`‘(Ï‘Zû©–q%$à ¯ÖDÄ @k5Ó¬þì§9ô ~rüÑó-Ï@{ÅFÒF ƒ—Ï­}Æ~`Kæâú1ÚŠJ2ér”OJäü˜Ã.zç ÜŸ‰ ¦§äMÀø<ÕL•$íL©Ö)¿v´€8„ÊÄqÁ·¡ƒC&_`~È–Ð’E!™zÔCŒŠÈ¶Pï³ë9 ɵaµ «' U¢„šY… E¸ç%V!N9ãÁ:º$iËòŠ¯™ªÀ€-…ž©0eȪpê¥-¡hè³$="0   ²|>G-§Ð/Ê9'/ÂhJ>Í‚àY‚¸çQ‰?G¸üŸ±  B‚¡I5 ¨Îä|]/,„bA³©÷FdÑêßQÔAÊ‘*Á¦¨˜i†d•¡c^.ÒRÐLÔ꘢,ŠÛ„}"…igÓI\/áÝ]üøsTwà­DH…"i°€PWI´€¦ýMå¨Sí%G„)y"º/´(,þ˜âKÙß“%ð”v‘4HUNÚ“ù­´:| m>Ò\a_Ò,g  ] !a4˃2ÇHÀ¾vÀiŒB×¥"؇ĕê‚!½qÄý{ªÈÞ5UJ°¯•‚rý¶Ö¬"Ü[Ô^ÒrK,GYCiàçõÂóJňšµÂ2&QÕt(5T 7 wv"å,¬06dI¹Os¶Ë3i‡•[#Á îÕڪÕUujçåfµäÚ"èÑÒ—Œ‡žiZ5@dã1Ø6.”‹ZîÔ£b’•-Ð]²–tûq¯ÕI©ÊÖR+ÍÇ†í§­…·0[M”USoIì´±m<’˜KªÕŠp<çÁìr”LÓ†b•7‘Vºñ–ºÄ¥Ï‰E“eT,m¹º/Óna\É‚^A‡ª¤_+Ùª•l×Jvj%j%»µ’½ZÉÃZI¯[/ªCÝ«ƒÝ«ÃÝ«Þ«CÞë6Ùm³[‡¿×…¬U—k»¾ÛÛõåØm˜ënÃd÷úõ÷úÅÒI-»¥]ۄϪ¬æ·+ŸEÙºOŠ’—n—t»t¾<KT3(½çÑçÍOøßÆ£ÕúM†Fo³z#«”vƒì@È|ÿZr3U¦}MÈÓì¢_àþˆî`!¶wLvxÿAOìî=Üív» ÃÆãÝÉdÒwû¾c©x׸]ÕàŸõwN\@6ÑV~^˜Y-ꀿѯÜTÇ?ò+‡´fhKWÊ‘r¥È*ãs4FŒ²D(Cz{[FbÛ0íL½ƒá„ÒøhyB¯ !Í·¤ØÞ >‘QtP^j+fáßDJdÞÓQ…”{Â`Âþ½Vë?aAÆNž°ÝC\Pá.4G;nš:Ãqä-?Å (äI°Ž1-´}·e¢¼ŠÓtäâ‹3ôj´    Ú ²:Ÿµ»ÿÞ;ÐýɇV¦ ÂÕ8†h›ýȆÏOZø&×Åÿœ@3Ž¶-å§#7C Z&£„-”L‰>‚*™‰ç|   F‰3\ûæ›}Ï¿d¾£.¤¨Á4±õ0Š1N…k íªíöÛÃ"ëƒÛ]¨bó6t‰ëà0@Ø´ÇÆoö9µGÅzæ²ÌäcÚc4¥ð5-òZ `‚-)ŠóÈ‚ÿL¸®!ᥫè«$Ê:„$ìÈFcl®és훂$É[³Î¾»ï¿Ûd¯bŸFSJ/ ù<�5s}ãûÌ€L,*1S!Ø:õ‰è*ÒÍŸIµÝLrÖ£9ÚufÊ…&禃•N™<Ï"§œW A5ârÏ«qp¬Á->*!D±òV£§¢^Ëø5m3ÇÒnåcgø4‰æ·Èð0ˆ á¬ö[ èþèû¨¨ð–­õW{ÍþGMÐNÉ¢z·XÞÊ¢*¥I`±^ŒŸà7Ë¢ìLyõœo-:CxÕŸ’}d²É*íâ–R‡ò¯¦¥oj³¨Àh*pƒÊÔ\¦DU×Bîé\—µcµÅâá>™ºÖWî™K•’5@_“Ým£Åª¿¬°­øê[ø^6ôûbþÓ\.Ý-ÃCó¶Æb‰Âªf%º1¾Ÿy €àNß@o:¡ 1Pê4 ‹y 7™èl}êb ™4%³[ô<Ñ°‡7üù”ñ€bðJøå1ExËâÏ8í:*™£#:¢Û©vNKpàô@Ác3.xØí“̃ßïd(r:YRŸíŒ¥n„âLð¦Ib’ÁG   .... (it goes on).

3 个答案:

答案 0 :(得分:7)

看起来压缩回应给我。要获得纯文本回复,您可以使用gzopen() + gzread()

$fp = gzopen('http://en.wikipedia.org/wiki/David_A._Kolb', 'r');

$contents = '';
while ($chunk = gzread($fp, 256000)) {
    $contents .= $chunk;
}

gzclose($fp);

...或者您可以使用file_get_contents(),但强制服务器返回纯文本:

$context = stream_context_create(array(
    'http'=>array(
        'method' => "GET",
        'header' => "Accept-Encoding: gzip;q=0, compress;q=0\r\n",
    )
));

$contents = file_get_contents('http://en.wikipedia.org/wiki/David_A._Kolb', false, $context);

...但并非所有服务器都考虑到这一点,因此我建议您使用cURL完成任务:

function get_url($url)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $data = curl_exec($curl);

    curl_close($curl);

    return $data;
}

$data = get_url('http://en.wikipedia.org/wiki/Word');
$data = get_url('http://en.wikipedia.org/wiki/David_A._Kolb');

答案 1 :(得分:1)

这听起来像是一个编码问题。尝试转换编码,看看是否有帮助。

mb_convert_encoding($wikitext, 'UTF-8',mb_detect_encoding($wikitext, 'UTF-8, ISO-8859-1', true)); 

file_get_contents函数显然存在非UTF-8编码的一些问题,根据它在PHP.net上的参考页面,推荐使用此函数。

答案 2 :(得分:-1)

使用以下格式:

file_get_contents(urlencode($url));

编辑1:

我使用下面的代码,它工作http://phpfiddle.org/main/code/yej-xwa

<?php
$url='http://en.wikipedia.org/wiki/David_A._Kolb';
echo file_get_contents($url);
?>