diff --git a/htdocs/includes/boxes/box_external_rss.php b/htdocs/includes/boxes/box_external_rss.php index 5ae1e8502cd5c5b2e989c6c3fbf1bce6b119cba8..611d2ee6080907563398168eca1fcb1f55effdc5 100644 --- a/htdocs/includes/boxes/box_external_rss.php +++ b/htdocs/includes/boxes/box_external_rss.php @@ -91,7 +91,15 @@ class box_external_rss extends ModeleBoxes { { $item = $rss->items[$i]; $href = $item['link']; - $title = utf8_decode(urldecode($item['title'])); + $result = $this->utf8_check(urldecode($item['title'])); + if ($result) + { + $title = utf8_decode(urldecode($item['title'])); + } + else + { + $title = (urldecode($item['title'])); + } $title=ereg_replace("([[:alnum:]])\?([[:alnum:]])","\\1'\\2",$title); // G�re probl�me des apostrophes mal cod�e/d�cod�e par utf8 $title=ereg_replace("^\s+","",$title); // Supprime espaces de d�but $this->info_box_contents["$href"]="$title"; @@ -102,6 +110,27 @@ class box_external_rss extends ModeleBoxes { 'target' => 'newrss'); } } + + /** + * \brief V�rifie si le flux est en UTF8 + * \param $Str chaine � v�rifier + */ + function utf8_check($Str) { + for ($i=0; $i<strlen($Str); $i++) { + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b + else return false; # Does not match any model + for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } function showBox() {