my related question buradan SO ben şu PHP pasajı ile geldim:
$url = parse_url($url);
if (is_array($url))
{
    $depth = 2;
    $length = 50;
    if (array_key_exists('host', $url))
    {
        $result = preg_replace('~^www[.]~i', '', $url['host']);
        if (array_key_exists('path', $url))
        {
            $result .= preg_replace('~/+~', '/', $url['path']); // normalize a bit
        }
        if (array_key_exists('query', $url))
        {
            $result .= '?' . $url['query'];
        }
        if (array_key_exists('fragment', $url))
        {
            $result .= '#' . $url['fragment'];
        }
        if (strlen($result) > $length)
        {
            $result = implode('/', array_slice(explode('/', $result, $depth + 2), 0, $depth + 1)) . '/';
            if (strlen($result) > $length)
            {
                $result = implode('/', array_slice(explode('/', $result, $depth + 1), 0, $depth + 0)) . '/';
            }
            $result = substr($result, 0, $length) . '...';
        }
    }
    return $result;
}
Görünüyor tür hackish, kod özel yinelenen if (strlen($result) > $length) blokları. I parse_url() tamamen bırakarak kabul ettik, ama scheme, user, pass görmezden istiyorum ve {[(5)] }.
Siz aynı etkiye sahiptir daha şık / organize çözüm ile gelip eğer ben merak ediyorum.
Ben sadece bir hata var, fark - $depth != 2 aşağıdaki blok etkilenen ise:
if (strlen($result) > $length)
{
    $result = implode('/', array_slice(explode('/', $result, $depth + 2), 0, $depth + 1)) . '/';
    if (strlen($result) > $length)
    {
        $result = implode('/', array_slice(explode('/', $result, $depth + 1), 0, $depth + 0)) . '/';
    }
    $result = substr($result, 0, $length) . '...';
}
Ben kısa sürede bu sorunu gidermek için çalışacağım, iyi çözüm bir döngü kullanmak olduğunu düşünüyorum. :S
Bu yeni pasajı ile değiştirerek, münhal:
if (strlen($result) > $length)
{
    for ($i = $depth; $i > 0; $i--)
    {
        $result = implode('/', array_slice(explode('/', $result), 0, $i + 1)) . '/';
        if (strlen($result) <= $length)
        {
            break;
        }
    }
    $result = substr($result, 0, $length) . '...';
}