(メモ)BlogEngine.NET 2.5で日本語タイトルからのSlugの生成をマシにする

まだ完璧じゃないけど、メモということで。

admin/Posts/Add_entry.aspx.cs のRaiseCallbackEvent を改造する。

        /// <summary>
        /// Processes a callback event that targets a control.
        /// </summary>
        /// <param name="eventArgument">
        /// A string that represents an event argument to pass to the event handler.
        /// </param>
        public void RaiseCallbackEvent(string eventArgument)
        {
            if (eventArgument.StartsWith("_autosave"))
            {
                var fields = eventArgument.Replace("_autosave", string.Empty).Split(
                    new[] { ";|;" }, StringSplitOptions.None);
                Session["content"] = fields[0];
                Session["title"] = fields[1];
                Session["description"] = fields[2];
                Session["slug"] = fields[3];
                Session["tags"] = fields[4];
            }
            else
            {
                //butaman modify
                System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"[^a-zA-Z0-9_\-]");
                System.Text.RegularExpressions.Regex r2 = new System.Text.RegularExpressions.Regex(@"\-{2,}");
                System.Text.RegularExpressions.Regex r3 = new System.Text.RegularExpressions.Regex(@"(^\-|\-$)");
                var result = eventArgument.Trim();
                result = result.Replace(".", "-");
                result = Utils.RemoveIllegalCharacters(result);
                result =  Microsoft.VisualBasic.Strings.StrConv(result,  Microsoft.VisualBasic.VbStrConv.Narrow, 0);
                result = r.Replace(result, "-");
                result = r2.Replace(result, "-");
                result = r3.Replace(result, "");
                callback = result;
            }
        }

我ながら酷いコードだが、こんな感じ。

ただ、Slugを空欄にしてPostすると、従来通りのSlugになってしまう。毎回「Extract from title」リンクボタンを押さないといけないので面倒。根本的には、Utils.RemoveIllegalCharactersを弄る必要があるのだけど、めんどくさいからやらない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です