SORU
24 AĞUSTOS 2008, Pazar


Nasıl Yığın Taşması SEO dostu URL oluşturmak mı?

regular expression tam nedir ya Başlığı alacağını başka bir işlem:

Nasıl Yığın Taşması gibi bir URL parçası olmak Başlığı değiştirir misin?

ve dönüşüyor

how-do-you-change-a-title-to-be-part-of-the-url-like-stack-overflow

bu Yığın Taşması SEO dostu URL kullanılır?

Kullanıyorum geliştirme ortamı Ruby on Rails, ama eğer başka varsa platforma özel çözümler.NET, PHP, Django), onları da görmek isterdim.

Ben (veya başka bir okuyucu) satır aşağı farklı bir platformda aynı sorunla karşı karşıya geleceksiniz eminim.

Özel yolları kullanıyorum, ve ben genelde bütün dize değiştirmek için nasıl bilmek ister özel karakterler kaldırılır, tüm küçük ve boşluk değiştirilir.

CEVAP
25 AĞUSTOS 2008, PAZARTESİ


Bunu nasıl yapacağımızı anlatayım. İlk bakışta fark muhtemelen daha kenar koşulları olduğunu unutmayın.

Bu ikinci versiyonu, 5 kat daha fazla performans (ve evet, ben, karşılaştırılan) içe kıvrık. Bu işlev, sayfa başına yüzlerce kez çağrılabilir çünkü optimize dedim.

/// <summary>
/// Produces optional, URL-friendly version of a title, "like-this-one". 
/// hand-tuned for speed, reflects performance refactoring contributed
/// by John Gietzen (user otac0n) 
/// </summary>
public static string URLFriendly(string title)
{
    if (title == null) return "";

    const int maxlen = 80;
    int len = title.Length;
    bool prevdash = false;
    var sb = new StringBuilder(len);
    char c;

    for (int i = 0; i < len; i  )
    {
        c = title[i];
        if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
        {
            sb.Append(c);
            prevdash = false;
        }
        else if (c >= 'A' && c <= 'Z')
        {
            // tricky way to convert to lowercase
            sb.Append((char)(c | 32));
            prevdash = false;
        }
        else if (c == ' ' || c == ',' || c == '.' || c == '/' || 
            c == '\\' || c == '-' || c == '_' || c == '=')
        {
            if (!prevdash && sb.Length > 0)
            {
                sb.Append('-');
                prevdash = true;
            }
        }
        else if ((int)c >= 128)
        {
            int prevlen = sb.Length;
            sb.Append(RemapInternationalCharToAscii(c));
            if (prevlen != sb.Length) prevdash = false;
        }
        if (i == maxlen) break;
    }

    if (prevdash)
        return sb.ToString().Substring(0, sb.Length - 1);
    else
        return sb.ToString();
}

Bunun yerine kodu, bir önceki sürüm (ama işlevsel, ve 5 kata kadar daha hızlı eşdeğerdir) görmek için bu yazının revizyon tarih görünümü (tarih bağlantısına tıklayın).

Ayrıca, RemapInternationalCharToAscii yöntem kaynak kodu here bulunabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Drakinen

    Drakinen

    1 EYLÜL 2008
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008