返回首页


最近,我有一个情况下,一个ASP.NET页面中显示用户在侧栏的URL。这工作得很好,我发现一些用户有很长的URL,这不看的权利的除外。
发生,我认为我可以简单的截断可见网址,同时仍然保持相同的基础链接。然而,当我被截断修剪多余的字符的URL的,我意识到它可以做得更加智能化。
例如,考虑的URL http://www.domain.com/here/is/one/long/url/page.apsx。如果我想保持它在40个字符,我可以修剪http://www.domain.com/here/is/one/long/u。问题是,这个缩写可以提供更多的信息。例如,它是一个目录或网页?而且,如果它的一个页面,什么样的? "; uquot;结束主张究竟是什么?
,那岂不是更好一点,如果我,而不是缩写URL到http://www.domain.com/.../url/page.apsx?我们已经失去了应有的三个点,显示信息丢失的几个字符。但我们仍然可以看到域,页面的名称和类型。
代码清单1 abbreviates的URL是这样。 UrlHelper类包含只是一个单一的,静态的方法,LimitLength()。此方法需要一个URL字符串,最大长度参数,并试图缩写URL,使其适合在指定的字符数,如上所述。

public class UrlHelper

{

  public static char[] Delimiters = { '/', '\\' };

  /// <summary>

  /// Attempts to intelligently short the length of a URL. No attempt is

  /// made to shorten less than 5 characters.

  /// </summary>

  /// <param name="url">The URL to be tested</param>

  /// <param name="maxLength">The maximum length of the result string</param>

  /// <returns></returns>

  public static string LimitLength(string url, int maxLength)

  {

    if (maxLength < 5)

      maxLength = 5;

    if (url.Length > maxLength)

    {

      // Remove protocol

      int i = url.IndexOfAny(new char[] { ':', '.' });

      if (i >= 0 && url[i] == ':')

        url = url.Remove(0, i + 1);

      // Remove leading delimiters

      i = 0;

      while (url.Length > 0 && (url[i] == Delimiters[0]

        || url[0] == Delimiters[1]))

        i++;

      if (i > 0)

        url = url.Remove(0, i);

      // Remove trailing delimiter

      if (url.Length > maxLength && (url.EndsWith("/") || url.EndsWith("\\")))

        url = url.Remove(url.Length - 1);

      // Remove path segments until url is short enough or no more segments:

      //

      // domain.com/abc/def/ghi/jkl.htm

      // domain.com/.../def/ghi/jkl.htm

      // domain.com/.../ghi/jkl.htm

      // domain.com/.../jkl.htm

      if (url.Length > maxLength)

      {

        i = url.IndexOfAny(Delimiters);

        if (i >= 0)

        {

          string first = url.Substring(0, i + 1);

          string last = url.Substring(i);

          bool trimmed = false;

          do

          {

            i = last.IndexOfAny(Delimiters, 1);

            if (i < 0 || i >= (last.Length - 1))

              break;

            last = last.Substring(i);

            trimmed = true;

          } while ((first.Length + 3 + last.Length) > maxLength);

          if (trimmed)

            url = String.Format("{0}...{1}", first, last);

        }

      }

    }

    return url;

  }

}
清单1:UrlHelper类

回答

评论会员:GenJerDan 时间:2012/01/26
在记事本中的帮助文件创建使用(或它的某些版本)

不是一件容易的事情,但并不太难,要么。基本上,你创建的网页为您的帮助,然后编译它们放在一起
评论会员:。阿布舍克苏尔 时间:2012/01/26
我想你可能是CHM文件的要求。 CHM基本上已编译的HTML文件。已经有名为Sandcastle的一个工具,要做到这一点。

检查:

{A1}

我希望这将帮助你
评论会员:。 时间:2012/01/26