我在视图中使用Url.Encode,它用+代替空格而不是:
/ production / cats-the-musical 我正在 ... / cats + the + musical 。
我确定这是一个简单的,但你在哪里配置使用哪个字符?
我会这样做:
public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl)
{
return helper.Encode(unencodedUrl.Replace(' ', '-'));
}
直到我从你们那里得到更好的答案。
编辑:感谢Guffa指出我的草率编码。
答案 0 :(得分:4)
我想提请注意路径与查询字符串编码差异
MVC允许/鼓励我们编写比查询字符串更容易记住的路径(路由)。例如在MVC中,/Products.aspx?id=1
可能是/Products/View/1
在此基础上,它还鼓励SEO友好,其他可能需要或不需要的数据,如/Products/View/1/Coffee
如果名称包含空格字符,或者必要参数是包含空格字符的字符串,并且您将其包含在Url 路径中,则必须执行以下两项操作之一,因为''不能留在Url Path或Query字符串参数中而不进行编码。
UrlPathEncode()
字符串UrlPathEncode()
,因为您可能还有其他需要编码的字符。注意:Url编码(用于查询字符串)和Url路径编码(用于Url的路径部分)之间存在很大差异
cats the musical
- > UrlEncode - > cats+the+musical
- 在cats the musical
- > UrlPathEncode - > cats%20the%20musical
如果你跟随;回到Web Forms与MVC - /Products.aspx?name=Coffee+Beans
将被重写为/Products/View/Coffee%20Beans
这样就让我们开始讨论OP的问题。问:你如何获得 SEO和人性化的网址?问:在UrlPathEn编码其余代码之前,使用@Guffas代码在您自己的代码中将“”替换为“ - ”。
在我工作过的网站中,当我们有一个用户输入的值仅用于搜索引擎优化(如博客标题或类似)时,我们通过将连续的空格折叠成单个“ - ”来进一步规范化字符串输出。例如
cats the musical否则会
cats-----the-----musical
成为cats-the-musical
答案 1 :(得分:3)
你不能改变UrlEncode方法使用的字符,对于空格的使用“+”在URL的编码标准中定义,使用“ - ”代替意味着该方法会改变值和不只是编码它。由于“ - ”字符未编码,因此无法将字符串解码回原始值。
在您的方法中,在进行替换之前无需检查角色。如果Replace方法没有找到要替换的内容,则只返回原始字符串引用。
public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) {
return helper.Encode(unencodedUrl.Replace(' ', '-'));
}