トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/292

ページの作成や編集にはユーザ登録が必要です。

rssプラグインで生成するリンクが不正になる

  • 投稿者: 510
  • カテゴリ: プラグイン
  • 優先度: 重要
  • 状態: 完了
  • 日時: 2006年10月28日 14時40分00秒

 内容

環境は

  • FreeStyleWiki3.6.2
  • Perl5.006001

です。

livedorrブログ、アメブロ、tDiaryの3者が出力するrdf(rss)ファイルをrssプラグインで表示させている時に気が付きました。当方の調べた範囲では、

  1. itemタグの子要素が、titleタグ、linkタグと並ぶ場合はリンクが正常に作られる
  2. itemタグの子要素が、linkタグ、titleタグと並ぶ場合はURLがタイトルの文字列と同じものになり不正なリンクを生成する

のようです。要素の出現順序に影響しない修正が必要かと思われます。その場限りの修正で申し訳ありませんが、patchをつけます。

-------------------------------------------------------------
*** org.RSS.pm  Wed Oct 25 05:30:35 2006
--- RSS.pm      Wed Oct 25 05:32:40 2006
***************
*** 93,106 ****
        while ($$content =~ m|<item[ >](.+?)</item|gsi) {

                my $item = $1;
!
                my $link  = "";
                my $title = "";
                my $date  = "";

                $item =~ m#title>([^<]+)</#gsi;
                $title = $1;
!
                $item =~ m#link>([^<]+)</#gsi;
                $link = $1;
                $link =~ s/\s".*//g; # ダブルクォーテーション以降を切り落とす
--- 93,108 ----
        while ($$content =~ m|<item[ >](.+?)</item|gsi) {

                my $item = $1;
!               my $HackLine = $1;
!
                my $link  = "";
                my $title = "";
                my $date  = "";

                $item =~ m#title>([^<]+)</#gsi;
                $title = $1;
!
!               $item = $HackLine;
                $item =~ m#link>([^<]+)</#gsi;
                $link = $1;
                $link =~ s/\s".*//g; # ダブルクォーテーション以降を切り落とす

 コメント

  • 「提案」のラジオボタンが消えていたので再度押しました - 510 (2006年10月28日 14時47分38秒)
  • FSWiki 自信の生成する RSS も rss プラグインで表示させるとリンクがおかしくなりますね。 - meta (2006年12月20日 07時13分03秒)
  • 修正コードは下記になります。 - KG (2018年06月27日 20時49分04秒)
--- plugin\rss\RSS.pm~	2017-11-30 16:06:48.000000000 +0900
+++ plugin\rss\RSS.pm	2018-06-27 20:41:36.000000000 +0900
@@ -82,45 +82,45 @@
 
 	if($$content =~ /<rss .*?version=\"(.*?)\"/i){
 	$version = $1;
 	}
 
 	if($version eq "1.0"){
-		$$content =~ m#(/channel>|/language>)#gsi;
+		$$content =~ m#(/channel>|/language>)#si;
 	}
 	
 	my $count=0;
 	
 	while ($$content =~ m|<item[ >](.+?)</item|gsi) {
 		
 		my $item = $1;
 		
 		my $link  = "";
 		my $title = "";
 		my $date  = "";
 		
-		$item =~ m#title>([^<]+)</#gsi;
+		$item =~ m#title>([^<]+)</#si;
 		$title = $1;
 		
-		$item =~ m#link>([^<]+)</#gsi;
+		$item =~ m#link>([^<]+)</#si;
 		$link = $1;
 		$link =~ s/\s".*//g; # ダブルクォーテーション以降を切り落とす
 
 		if ($version eq "2.0") {
-			if ($item =~ m#pubDate>([^<]+)</#gsi) {
+			if ($item =~ m#pubDate>([^<]+)</#si) {
 				$date = $1;
 			}
 		}
 		if ($version eq "1.0") {
-			#if ($item =~ m#(description|dc\:date)>([^<]+)</#gs) {
-			if ($item =~ m#dc\:date>([^<]+)</#gsi) {
+			#if ($item =~ m#(description|dc\:date)>([^<]+)</#si) {
+			if ($item =~ m#dc\:date>([^<]+)</#si) {
 				$date = $1;
 			}
 		}
 		if ($version eq "0.91") {
-			if($item =~ m#description>([^<]+)</#gsi){
+			if($item =~ m#description>([^<]+)</#si){
 				$date = $1;
 			}
 		}
 		
 		# 文字コードの変換
 		&Jcode::convert(\$title,'euc',$charset);
お名前: コメント:

最終更新時間:2018年06月29日 21時57分16秒