• User

    Problemi con set di caratteri via php

    Ciao a tutti.
    problemino con PHP che sto tentando di risolvere da un po' di tempo:

    ho uno script che si connette via fsockopen ad un file rss e mi restituisce il feed.
    Quando visualizzo questi dati alcuni caratteri speciali (l'apice fatto con Alt+096 e le doppie virgolette) vengono sostituiti dal punto interrogativo (?).
    Ho fatto svariate prove ma da PHP non sono riuscito in nessun modo a leggere un file esterno che contenga questi caratteri e visualizzarli correttamente in output.

    Mai capitato qualcosa di simile?

    Il sito per cui li sto usando è questo:
    http://www.blogfug.it

    Grazie e a presto,
    Sergio


  • User

    Ciao Deantenea,
    la problematica da te descritta è tipica di una incompatibilità nel set di caratteri utilizzato. Assicurati che il feed di input e quello di output abbiano la medesima codifica (iso-8859-1, utf-8, ecc.).

    Cordialmente
    Alessio


  • User

    Sì, il problema è di codifica dei caratteri, però ho provato a codificarli sia in utf8 che in iso, ma i risultati non mi soddisfano.

    nonostante faccia il riconoscimento automatico del charset del feed di origine in output ha comunque problemi.
    In parte dipende dal fatto che nonostante molti feed abbiano un charset dicharato utf8, poi usano dei caratteri iso e viceversa.

    Dovrei capire se posso risolvere i casini che fanno quelli che creano i feed.

    Ciao,
    Sergio


  • User

    Puoi postarci un esempio per comprendere al meglio il problema?
    Url del feed importato come input e tua pagina di output.

    Cordialmente
    Alessio


  • User Attivo

    Ciao
    io credo che l'unica soluzione sia quella di filtrare tramite php la stringa di lettura del RSS in questo modo:

    $articolonuovo = str_replace("`","'",$articolo);

    come vedi sostituisce ` con ' e questo filtro va bene per questo carattere

    Dovrai mettere tanti filtri quanti i caratteri che ti sballa ma non sono poi tantissimi credo.

    Spero di averti aiutato


  • User

    Il codice sarebbe circa 800 righe...
    La parte del codice che legge i dati è questa:

    [PHP]if($fp = fsockopen(
    $host,
    $port,
    $errno,
    $errstr,
    $this->_fp_timeout
    ))
    {
    return true;
    }


  • User Attivo

    Quella è solo la parte che apre la connessione

    tu devi cercare la stringa che contiene il testo del feed che ti riporta in schermo, da qualche parte c'è

    ma non prendere questo mio post per "oro colato", ho pensato che questa era una soluzione valida perchè in molti casi l'ho usata per i miei intopamenti.

    Ciao


  • User

    Ehm...
    l'avevo scritta... mi sa che per sbaglio l'ho tolta dal post.

    Riscrivo bene il codice:

    if($fp = fsockopen(
    $host,
    $port,
    $errno,
    $errstr,
    $this->_fp_timeout
    ))
    {
    return true;
    }

    	while ( $data = fread($fp, $this->maxlength) ) {
    	    $results .= $data;
    		
    	    if (
    	        strlen($results) > $this->maxlength ) {
    	        break;
    	    }
    	} 
    
    
    		$fp = fopen("prova.txt","w"); 
    		fputs ($fp,$results); 
    

    // le due righe precedenti le ho aggiunto per vedere cosa scrive


  • User

    Mi taglia sempre una parte del post...


  • User Attivo

    Beh comunque su $results dovresti avere il testo, è un po poco per capire come funziona ma puoi fare una prova.

    Guarda se poi quella variabile è utilizzata per visualizzare il testo.

    Io credo che da qualche parte hai un echo o un print, quello che passa da queste istruzioni e quello che dovresti filtrare.