PHP: merkezinden keserek URL kısaltın?

3 Cevap

Ben onlar merkezine url kesti ve onu kısaltmak için uzun eğer 3 nokta eklemek birçok forumlarda gördüm.

Örnek: http://stackoverflow.com/questions/1899537/ajaxify-multipart-encoded-form-upload-forms --- olacak ---> http://stackoverflow.c...ed-form-upload-forms

Yapmak için nasıl saf php kullanarak?

Teşekkür ederim

3 Cevap

örneğin ile preg_replace()

$testdata = array(
  'http://stackoverflow.com/questions/1899537/ab',
  'http://stackoverflow.com/questions/1899537/abc',
  'http://stackoverflow.com/questions/1899537/abcd',
  'http://stackoverflow.com/questions/1899537/ajaxify-multipart-encoded-form-upload-forms'
);

foreach ($testdata as $in ) {
  $out = preg_replace('/(?<=^.{22}).{4,}(?=.{20}$)/', '...', $in);
  echo $out, "\n";
}

baskılar

http://stackoverflow.com/questions/1899537/ab
http://stackoverflow.c...uestions/1899537/abc
http://stackoverflow.c...estions/1899537/abcd
http://stackoverflow.c...ed-form-upload-forms

Sen strlen ile birlikte substr işlevini kullanabilirsiniz

$url = "http://stackoverflow.com/questions/1899537/";
if(strlen($url) > 20)
{
    $cut_url = substr($url, 0, 6);
    $cut_url .= "...";
    $cut_url .= substr($url, -6);
}

<a href="<?=$url; ?>"><?=$cut_url;?></a>

@null iyi bir çözüm sundu. Ama UTF-8 farkında olmak:> ä

İşte kullanarak biraz geliştirilmiş bir versiyonu olan mb_string functions:

function short_url($url, $max_length=20)
{
    mb_internal_encoding("UTF-8");

    $real_length = mb_strlen($url);

    if ( $real_length <= $max_length )
    {
        return $url;
    }

    $keep = round( $max_length / 2 ) - 1;

    return mb_substr($url, 0, $keep) . '…' . mb_substr($url, -$keep);
}

// Test
print short_url('http://de.wikipedia.org/wiki/Märchen', 13);
// http:/…ärchen - not nice, but still valid UTF-8. :)