解決CS Post檔名相衝問題

前些日子,在Post Blog文章到CS 2.1時發現一個問題,由於CS會試著以Post的標題(Subject)為基礎產生所謂的Post.Name屬性(放在資料表cs_Posts.PostName欄位),這個名稱可以拿來做為直接連結該篇Post的URL檔名。而它處理的原則是將Subject中的”無效字元”(嚴格來說是英文與數字以外的字元都被視為無效字元)排除,並轉為小寫,例如:

TIPS-XHTML下如何強制指定SPAN寬度” 變成 “tips xhtml span”,檔案名則是tips-xhtml-span.aspx

KB-Oracle轉SQL的日期陷阱”變成” kb oracle sql”,檔名則是kb-oralce-sql.aspx

當整個標題都是中文(無效字元)時,PostName會變成空字串,此時檔案名會改用PostID的數字取代。

問題出在如果兩篇Post的標題,英文的部分完全相同,只差在中文的部分,例如: “KB-ASP.NET 2.0專案部署探討”與”KB-ASP.NET 2.0效能議題”,二者所產生的PostName都是”kb asp net 2 0”,結果就會發生明明文章標題不同,CS卻一直跳出標題重覆的窘境。

為了解決這個問題,我小小地修改了CommunityServer.Blogs.Compnents.WeblogPosts的PostFormatting Method如下:

            else if((post.BlogPostType == BlogPostType.Post || post.BlogPostType == BlogPostType.Article) && post.Weblog.AutoNamePosts)

            {

 

                string name = spacer.Replace(postNameInvalidChars.Replace(post.Subject, " "), " ").Trim().ToLower();

 

                //2007-02-09 by Jeffrey Lee

                //If subject contains both Chinese and English, set empty string

                if ( name.Length > 0 //means subject contains English character

                    && System.Text.Encoding.UTF8.GetByteCount(post.Subject) != post.Subject.Length  //means subject contains non-English characters

                    )

                    name = ""; //set it as empty string, CS will use serial number as file name

 

                if(name.Length > 225)

                    name = name.Substring(0,225).Trim();

經修改後,未來只要是中英文夾雜的Subject,PostName一律設為空字串,檔案名會使用數字跳號,如此就不會有不同的標題確被認定重覆的狀況了。

2007-05-12 更新
好朋友Rex已經找到透過設定解決的方法了,不必再辛苦改Code,請看這裡

歡迎推文分享:
Published 10 February 2007 12:09 AM 由 Jeffrey
Filed under:
Views: 9,079



意見

# 小熊子 said on 19 April, 2007 11:20 PM

用 WLW 會出現

Server Error 0 Occurred

The Post could not be added

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<February 2007>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication