-
-
Notifications
You must be signed in to change notification settings - Fork 798
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Flux RSS ne peut pas être ajouté #233
Comments
Le flux n'est pas valide, il semblerait qu'il soit impossible de le parser correctement : http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fwww.starcitizen.fr%2Ffeed%2F En fait il s'agit d'un soucis dans un article, mais ça suffit à planter le parsage ;) |
Il faudrait trouver un moyen d'être moins strict, par exemple en utilisant Tidy http://stackoverflow.com/questions/15147711/php-tidy-removes-whitespace-and-inserts-newlines ou en changeant le parseur XML de SimplePie pour un tel DOMDocument qui a des options pour être moins strict mais qui charge tout le document en mémoire. |
Voilà un patch à tester un peu manuellement avant de le mettre dans dev. public function parse(&$data, $encoding)
{
// Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
if (strtoupper($encoding) === 'US-ASCII')
{
$this->encoding = 'UTF-8';
}
else
{
$this->encoding = $encoding;
}
// Strip BOM:
// UTF-32 Big Endian BOM
if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
{
$data = substr($data, 4);
}
// UTF-32 Little Endian BOM
elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
{
$data = substr($data, 4);
}
// UTF-16 Big Endian BOM
elseif (substr($data, 0, 2) === "\xFE\xFF")
{
$data = substr($data, 2);
}
// UTF-16 Little Endian BOM
elseif (substr($data, 0, 2) === "\xFF\xFE")
{
$data = substr($data, 2);
}
// UTF-8 BOM
elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
{
$data = substr($data, 3);
}
if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false)
{
$declaration = $this->registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5)));
if ($declaration->parse())
{
$data = substr($data, $pos + 2);
$data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data;
}
else
{
$this->error_string = 'SimplePie bug! Please report this!';
return false;
}
}
try
{
$dom = new DOMDocument();
$dom->recover = true;
$dom->strictErrorChecking = false;
$dom->loadXML($data);
$data = $dom->saveXML();
//file_put_contents('/tmp/fresrss-parser.log', date('c') . ' ' . 'OK' . "\n", FILE_APPEND);
}
catch (Exception $e)
{
file_put_contents('/tmp/fresrss-parser.log', date('c') . ' ' . $e->getMessage() . "\n" . $data . '----------------' . "\n", FILE_APPEND);
}
$return = true;
static $xml_is_sane = null; |
Wao, félicitations pour ton implication dans FreshRSS, j'ai l'impression qu'à chaque problème insurmontable, toi ou Marien trouvez en quelques minutes la solution :) Je ne vais pas avoir le temps de tester malheureusement, j'ai simplement ouvert un rapport pour ce site en le trouvant par hasard :$ |
Utilise une méthode moins stricte qui tolère des erreurs XML dans les flux. Le choix de l'encodage en entrée a dû être légèrement changé car SimplePie a une stratégie d'essayer plusieurs encodages jusqu'à en trouver un qui marche. En étant moins strict sur les erreurs, ça marche plus souvent, et du coup les encodages n'étaient plus bon. À essayer avec plein de flux. Tous mes flux passent (~150). Devrait permettre de fermer #233 Fonctionne aussi avec des flux à encodage invalide comme http://travaux.ovh.net/rss.php qui se déclare en "text/xml" (du coup ASCII) mais dans le flux avec un entête XML déclarant de l'UTF-8
Bon, j'ai passé dans /dev un patch un peu plus compliqué pour tolérer non seulement du XML mal formé mais aussi certains encodages mal déclarés, sans trop casser (j'espère) SimplePie. |
Cela fonctionne parfaitement, félicitations =) |
👍 |
Flux : http://www.starcitizen.fr/feed/
Erreur : « Un problème interne a été rencontré, le flux n’a pas pu être ajouté »
The text was updated successfully, but these errors were encountered: