2013-03-23 19 views
5

Çoğu çözümden geçtim ama hepsi işe yaramadı.file_get_contents bazı Vikipedi sayfaları ile garip karakter verir, neden?

Bir Wikipedia sayfasını file_get_contents kullanarak ayrıştırmaya çalışıyorum, ancak dönüş, henüz anlamadığım bir sayfaya göre farklılık gösteriyor.

Bu sayfayla kullanmak Örneğin

, iyi çalışıyor http://en.wikipedia.org/wiki/Word ama onlar sadece aynıyız bu sayfayı o strage karakterleri verir http://en.wikipedia.org/wiki/David_A._Kolb ..

Ve iki sayfada birlikte kullanıldığında, sanırım .

Sorun ne olabilir? Ne var Burada

GÜNCELLEME 1

: bir kodlama sorunu olabilir gibi

î²$'ˆ‰Ã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µäÚ"èÑÒ—Œ‡ž[email protected]ã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‰ëà[email protected]Ø´ÇÆ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•’[email protected]_“Ý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). 
+0

Bu * garip karakterler * ne göndermek istediğiniz? – alex

+0

Bana sıkıştırılmış yanıt gibi görünüyor. 'File_get_contents()' yerine gzopen() + gzread() 'ı deneyebilir misiniz? – lazyhammer

+0

İkisini de denedim, aslında her iki sayfada da bir hata atıyor, ancak ilk sayfa, sayfanın tüm dizesini döndürdüğü için iyi görünüyor, ikincisi ise hiçbir şey döndürmediğinden hala sorun yaşıyor. – Fahd

cevap

7

bana sıkıştırılmış tepki benziyor http://phpfiddle.org/main/code/yej-xwa çalıştı.

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

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

gzclose($fp); 

... ya file_get_contents() kullanabilirsiniz, ancak kuvvet sunucusu düz metin dönmek için: Düz metin yanıt almak için, gzopen() + gzread() kullanabileceğiniz tüm

$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); 

... ama sunucular bunu dikkate, bu yüzden size görev için cURL kullanmanızı öneririz:

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'); 
+0

wikipedia'nin "Accept-Encoding" başlığını dikkate almadığı anlaşılıyor, böylece ikinci yaklaşım uygun değil. – lazyhammer

+0

İlk çalıştı! Öyleyse problem neydi ?? sıkıştırma mı? ve bu çözüme nasıl geldiniz? – Fahd

+0

@Fahd Evet, glat yardımcı oldu :) – lazyhammer

1

Bu duyulur. Kodlamayı dönüştürmeyi deneyin ve bunun işe yarayıp yaramadığını görün. PHP.net üzerinde

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

file_get_contents fonksiyon görünüşte var ona göre sigara UTF-8 kodlaması ile bazı sorunları vardır referans sayfası bu fonksiyon orada önerildi.

+0

sadece aynı çıktıyı verir. (GÜNCELLEME: Garip karakterlerle aynı şeyi kastediyorum, ama farklı görünüyorlar :) – Fahd

+0

Sayfayı tarayıcıda açarsanız, hala orada tuhaf karakterler var mı? Bunlar editör yazdırmak ama böyle bazı pencerelerin editörler için bir soru işareti ile diyagonal olarak garip karakterler ile temsil etmez kontrol karakterleri olabilir. – Adam

+0

Vikipedi sayfa, hayır sadece iyi görünüyor .. – Fahd

-1

kullanımı bu formatı:

file_get_contents(urlencode($url)); 

Düzenleme 1:

kod aşağıda kullanılan ve

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

diyor ki: Mesaj: file_get_contents (http% 3A% 2F% 2Fen.wikipedia.org% 2Fwiki% 2FDavid_A._Kolb) [function.file-get-contents]: akış açamadı: Böyle bir dosya veya dizin yok – Fahd

+0

'file_get_contents' işlevini nasıl kullandınız? Lütfen kodu yazınız – Amir

+0

Ben tam olarak aynı kodu kullandım, ama phpfiddle.org'da çalıştım ... gerçekten de! – Fahd

İlgili konular