2013-03-23 40 views
5

Ho attraversato la maggior parte delle soluzioni ma non hanno funzionato.file_get_contents restituisce strani caratteri con alcune pagine di Wikipedia, perché?

Provo ad analizzare una pagina di Wikipedia usando file_get_contents ma il ritorno differisce in base a qualcosa nella pagina che non ho ancora capito.

Per esempio quando lo uso con questa pagina, http://en.wikipedia.org/wiki/Word funziona benissimo, ma quando lo uso con questa pagina http://en.wikipedia.org/wiki/David_A._Kolb restituisce caratteri strage ..

Ed entrambe le pagine sono solo lo stesso, immagino .

Quale potrebbe essere il problema?

UPDATE 1

Ecco cosa ho ottenuto:

î²$'ˆ‰Ã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

si desidera pubblicare ciò che questi * * strani personaggi sono? – alex

+0

Sembra una risposta compressa a me. Puoi provare 'gzopen() + gzread()' invece di 'file_get_contents()'? – lazyhammer

+0

Li ho provati entrambi, in realtà genera un errore in entrambe le pagine, ma la prima pagina sembra a posto poiché restituisce l'intera stringa della pagina, mentre la seconda ha ancora il problema poiché non restituisce nulla. – Fahd

risposta

7

Sembra risposta compressa a me. Per ottenere la risposta di testo, è possibile utilizzare gzopen() + gzread():

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

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

gzclose($fp); 

... oppure è possibile utilizzare file_get_contents(), ma il server forza di ritornare testo semplice:

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

... ma non tutti server prendono questo in considerazione, quindi vi suggerisco di utilizzare cURL per il vostro compito:

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

Sembra che wikipedia non tenga conto dell'intestazione 'Accept-Encoding', quindi il secondo approccio non è fattibile. – lazyhammer

+0

Il primo ha funzionato !!! Allora, qual è il problema ?? è compressione? e come sei arrivato a questa soluzione? – Fahd

+0

@Fahd Sì, glace ha aiutato :) – lazyhammer

1

Questo suona come potrebbe essere un problema di codifica. Prova a convertire la codifica e vedere se questo aiuta.

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

La funzione file_get_contents ha apparentemente alcuni problemi con codifica UTF-8 non in base alla sua pagina di riferimento su PHP.net questa funzione è stato consigliato lì.

+0

dà solo lo stesso risultato. (AGGIORNAMENTO: intendo gli stessi caratteri strani, ma hanno un aspetto diverso :) – Fahd

+0

Se apri la pagina in un browser ci sono ancora strani personaggi? Potrebbero trattarsi di caratteri di controllo che il tuo editor non stampa ma che rappresentano caratteri strani, come una diagonale con un punto interrogativo per alcuni editor di finestre. – Adam

+0

Se intendi la pagina di Wikipedia, non sembra proprio soddisfacente .. – Fahd

-1

uso questo formato:

file_get_contents(urlencode($url)); 

Edit 1:

ho usato il codice qui sotto e ha funzionato http://phpfiddle.org/main/code/yej-xwa

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

dice: Messaggio: file_get_contents (http% 3A% 2F% 2Fen.wikipedia.org% 2Fwiki% 2FDavid_A._Kolb) [function.file-get-contents]: impossibile aprire lo stream: nessun file o directory come – Fahd

+0

come hai usato 'file_get_contents'? per favore scrivi il codice – Amir

+0

Ho usato esattamente lo stesso codice che hai scritto, anche se ha funzionato per me in phpfiddle.org ... davvero strage! – Fahd

Problemi correlati