Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: .:UND3R:. en 24 Julio 2012, 23:02 pm



Título: Problemas tilde en PHP.
Publicado por: .:UND3R:. en 24 Julio 2012, 23:02 pm
Hola a todos tengo el siguiente lector de RSS de facebook, este funciona la perfección, el problema es que los tildes no me los muestra correctamente, ¿alguien podría echarme una mano?

Código
  1. <?php
  2.    // Without this "ini_set" Facebook's RSS url is all screwy for reading!
  3.    // This is the most essential line, don't forget it.
  4.    ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
  5.  
  6.    // This URL is the URL to the Facebook Page's RSS feed.
  7.    // Go to the page's profile, and on the left-hand side click "Get Updates vis RSS"
  8.    $rssUrl = "http://www.facebook.com/feeds/notifications.php?id=319579974767006&viewer=1074983523&key=AWhjAKL7r9fCfZlH&format=rss20";
  9.    $xml = simplexml_load_file($rssUrl); // Load the XML file
  10.  
  11.    // This creates an array called "entry" that puts each <item> in FB's
  12.    // XML format into the array
  13.    $entry = $xml->channel->item;
  14.  
  15.    // This is just a blank string I create to add to as I loop through our
  16.    // FB feed. Feel free to format however you want, or do whatever else
  17.    // you want with the data.
  18.    $returnMarkup = '';
  19.  
  20.    // Now we'll loop through are array. I just have it going up to 3 items
  21.    // for this example.
  22.    for ($i = 0; $i < 3; $i++) {
  23.        //$returnMarkup .= "<h3>".$entry[$i]->title."</h3>"; // Title of the update
  24.        //$returnMarkup .= "<p>".$entry[$i]->link."</p>"; // Link to the update
  25.        $returnMarkup .= "<p>".$entry[$i]->description."</p>"; // Full content
  26.        //$returnMarkup .= "<p>".$entry[$i]->pubDate."</p>"; // The date published
  27.        $returnMarkup .= "<p>".$entry[$i]->author."</p>"; // The author (Page Title)
  28.    }
  29.  
  30.    // Finally, we return (or in this case echo) our formatted string with our
  31.    // Facebook page feed data in it!
  32.    echo $returnMarkup;
  33. ?>

Saludos


Título: Re: Problemas tilde en PHP.
Publicado por: Spider-Net en 24 Julio 2012, 23:58 pm
Tiene que ver con la codificación. Lo ideal es que cambies la codificación de utf-8 a ISO-8859-1. Otra solución que debería funcionar es usar htmlentities cuando vayas a mostrar la información, algo así:

Código
  1. for ($i = 0; $i < 3; $i++) {
  2.        //$returnMarkup .= "<h3>".$entry[$i]->title."</h3>"; // Title of the update
  3.        //$returnMarkup .= "<p>".$entry[$i]->link."</p>"; // Link to the update
  4.        $returnMarkup .= "<p>".htmlentities($entry[$i]->description)."</p>"; // Full content
  5.        //$returnMarkup .= "<p>".$entry[$i]->pubDate."</p>"; // The date published
  6.        $returnMarkup .= "<p>".htmlentities($entry[$i]->author)."</p>"; // The author (Page Title)
  7. }


Título: Re: Problemas tilde en PHP.
Publicado por: .:UND3R:. en 25 Julio 2012, 05:55 am
Tiene que ver con la codificación. Lo ideal es que cambies la codificación de utf-8 a ISO-8859-1. Otra solución que debería funcionar es usar htmlentities cuando vayas a mostrar la información, algo así:

Código
  1. for ($i = 0; $i < 3; $i++) {
  2.        //$returnMarkup .= "<h3>".$entry[$i]->title."</h3>"; // Title of the update
  3.        //$returnMarkup .= "<p>".$entry[$i]->link."</p>"; // Link to the update
  4.        $returnMarkup .= "<p>".htmlentities($entry[$i]->description)."</p>"; // Full content
  5.        //$returnMarkup .= "<p>".$entry[$i]->pubDate."</p>"; // The date published
  6.        $returnMarkup .= "<p>".htmlentities($entry[$i]->author)."</p>"; // The author (Page Title)
  7. }

Gracias por tu respuesta, pero htmlentities me devuelve el código en texto plano (lo bueno es que con tildes), que podría hacer?

Modifiqué la codificación con header(), también he hecho un echo con
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> y tampoco nada, a ver quien me ayuda, saludos

SOLUCIONADO: utf8_decode();