problema con caratteri (stripslashes)

darkman_1975

Nuovo Utente
15 Giu 2011
20
0
0
Salve ho questo problema:
leggendo un feed rss con uno script mi stampa molti " ? " invece di " ' " nella variabile $title. Invece inserendo la funzione "stripslashes" mi aggiusta solo i primi che legge e dopo mostra ancora " ? ".
ecco lo script.

PHP:
$insideitem = false;
$tag = "";
$title = "";
$description = "";
$link = "";

function startElement($parser, $name, $attrs) {
global $insideitem, $tag, $title, $description, $link;
if ($insideitem) {
$tag = $name;
} elseif (strtolower($name) == "item") {
$insideitem = true;
}
}


function endElement($parser, $name) {
global $insideitem, $tag, $title, $description, $link;
if (strtolower($name) == "item") {
	


$title2 = stripslashes($title);
	
	
	
//$title2= stripslashes(utf8_decode(trim($title)));
print "<br>";
printf('<font color="#0000FF" size="+3">%s</font>' ,
trim($title2),trim($title2));

echo ('<font color="#000000" size="+3">');
printf("&nbsp;");
printf("%s" , ($description));
echo ('</font>');
print "<br>";





$title = "";
$description = "";
$link = "";
$insideitem = false;
}
}
 
function characterData($parser, $data) {
global $insideitem, $tag, $title, $description, $link;
if ($insideitem) {
switch (strtolower($tag)) {
case "title":
$title .= $data;
break;
case "description":
$description .= $data;
break;
case "link":
$link .= $data;
break;
}
}
}
 
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement" , "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
// Carico indirizzo feed rss delle news di WebMasterPoint.org
$fp = fopen("http://www.palermowebnews.it/feed/" ,"r")
or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML error: %s at line %d" ,
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);

Potete darmi una mano? :crying::crying::crying:

Grazie in anticipo.
 
Sembrerebbe un problema di codifica. Prova ad applicare htmlspecialchars:
PHP:
$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false);
E vedi se in questo modo converte i caratteri speciali nelle relative entità HTML.
 
Grazie per avermi risposto, xò inserendo:
PHP:
$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false);
mi da errore, invece se inserisco:
PHP:
$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
lo accetta ma non cambia nulla :(
mi scrive es.: ?DIVINO? invece di “DIVINO”

Come posso risolvere?
 
Intendo dire: che errore restituisce SENZA correggere la chiamata alla funzione?

Allora, utlizzando questo:
PHP:
$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false);

mi restituisce questo:

Warning: htmlspecialchars() expects at most 3 parameters, 4 given in c:\programmi\easyphp1-8\www\vetrina\eventi2.php on line 47

Scusa io non so nulla di php, ma voglio farti una domanda: ma è possibile che l'xml sia scritto male, con caratteri strani? perchè io li vedo gli accenti e le doppie virgolette e anche le apostrofi. Ad esempio leggo: L’Arte, andra’, piu’ “Cavalleria Rusticana” .
Quindi non capisco...
 
Questo accade perché stai usando una versione di PHP inferiore alla 5.2.3, quando il quarto parametro è stato aggiunto. Questo rappresenta un grosso problema, perché nell'XML, a quanto pare, alcuni caratteri sono stati già formattati come entità HTML, e non puoi formattarli nuovamente, perché non verrebbero visualizzati.

Noto che, comunque, ho sbagliato funzione. Prova usando htmlentities, che converte tutti i possibili caratteri in entità HTML. Usala come prima, solamente cambia il nome (e ometti il quarto parametro, sperando che funzioni).
 
Questo accade perché stai usando una versione di PHP inferiore alla 5.2.3, quando il quarto parametro è stato aggiunto. Questo rappresenta un grosso problema, perché nell'XML, a quanto pare, alcuni caratteri sono stati già formattati come entità HTML, e non puoi formattarli nuovamente, perché non verrebbero visualizzati.

Noto che, comunque, ho sbagliato funzione. Prova usando htmlentities, che converte tutti i possibili caratteri in entità HTML. Usala come prima, solamente cambia il nome (e ometti il quarto parametro, sperando che funzioni).

Sei Grande!!!! risolto :) avevi ragione te, ho cambiato versione di php. Ho installato l'ultimo wamp e senza mettere nessuna riga di decodifica dei caratteri è tutto già perfetto :) Grazieeeeeeeeeeee tantisssiiiimooooo.
 

Discussioni simili