我想知道将字符串(例如帖子标题)转换为描述性网址的最佳方式是哪种。 想到的最简单的方法是使用正则表达式,例如:
public static Regex regex = new Regex(
"\\W+",
RegexOptions.IgnoreCase
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled
);
string result = regex.Replace(InputText,"_");
转
“我的第一个(但不是那么糟糕)蛋糕!! :) .//。。”
到
my_first_yet_not_so_bad_cupcake_
然后我可以删除最后一个“_”并检查它对我的数据库,看看它是否存在。在这种情况下,我会添加一个尾随数字,使其独一无二并重新检查。
我可以使用它,比如说
http://myblogsite.xom/posts/my_first_yet_not_so_bad_cupcake
但是,这样安全吗?我应该检查其他东西(比如字符串的长度) 你更喜欢其他更好的方法吗? 感谢
答案 0 :(得分:2)
这就是我的工作。 regStripNonAlpha删除所有非alpha或“ - ”字符。 Trim()删除尾部和前导空格(因此我们最终不会在任何一侧使用破折号)。 regSpaceToDash将空格(或空格的行)转换为单个破折号。这对我来说效果很好。
static Regex regStripNonAlpha = new Regex(@"[^\w\s\-]+", RegexOptions.Compiled);
static Regex regSpaceToDash = new Regex(@"[\s]+", RegexOptions.Compiled);
public static string MakeUrlCompatible(string title)
{
return regSpaceToDash.Replace(
regStripNonAlpha.Replace(title, string.Empty).Trim(), "-");
}
答案 1 :(得分:1)
string result = regex.Replace(InputText,“ - ”);
而不是得分夸大( - ),这将为谷歌搜索引擎带来额外的好处。
有关详细信息,请参阅以下帖子
答案 2 :(得分:1)
这是我不久前写的一种方法,它采用字符串并将其格式化为永久链接。
private string FormatPermalink(string title)
{
StringBuilder result = new StringBuilder();
title = title.Trim();
bool lastOneChanged = false;
for (int i = 0; i < title.Length; i++)
{
char c = title[i];
if (!char.IsLetterOrDigit(c))
{
c = '_';
if (lastOneChanged)
{
continue;
}
lastOneChanged = true;
}
else
{
lastOneChanged = false;
}
result.Append(c);
}
if (result[result.Length - 1] == '_') //if last one is underscore, remove
{
result = result.Remove(result.Length - 1, 1);
}
return result.ToString();
}
这也考虑了特殊字符,所以如果标题有一个特殊字符,它就会忽略它并转到下一个字符。
答案 3 :(得分:0)
您可以查看重写HTTPModule的URL。网上有很多例子。
在web.config中实现后,您只需使用SEO友好名称指定正则表达式映射到“真实”页面
<!-- Rule 1: example... "/admin/somepage" redirects to..."/UI/Forms/Admin/frmPage.aspx" -->
<add key="^/admin/(.*)" value="/UI/Forms/Admin/frm$1.aspx" />
答案 4 :(得分:0)
如果您想避免自己这样做,可以使用像http://urlrewriter.net/这样的HttpModule 有帮助。它非常好,但需要一点设置。
答案 5 :(得分:0)
就个人而言,我会将你的特殊角色与日期相结合,所以你的例子看起来像是:
http://myblogsite.xom/posts/2009/04/03/my_first_yet_not_so_bad_cupcake
这样,如果你满足于相同的标题,它也会按日期区分。我经常在我访问的一些博客上看到这一点,他们使用“五个随机事物发帖”很多(但不是在同一天内)。