- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemi con set di caratteri via php
-
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.itGrazie e a presto,
Sergio
-
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
-
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
-
Puoi postarci un esempio per comprendere al meglio il problema?
Url del feed importato come input e tua pagina di output.Cordialmente
Alessio
-
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
-
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;
}
-
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
-
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
-
Mi taglia sempre una parte del post...
-
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.