如何截断动态长度url slug的字符串?

时间:2012-04-04 09:52:15

标签: php

在我的slug列中,我设置的限制为varchar = 100,值将按此存储

how-do-i-truncate-a-string-with-dynamic-length-url-slug

我希望slug是一个unique键,所以我用最后一个自动增量id更新slug值,新的slug值是:

how-do-i-truncate-a-string-with-dynamic-length-url-slug-10

所以这里last auto increment最后将是一个很大的数字..

preg_replace('/\s+?(\S+)?$/', '', substr($slugwithautoincrement, 0, 101));

使用此preg_replace删除我的auto increment number

问题:

如何在不删除最后一个自动增量编号的情况下将值修复截断为100个字符?

结果应该是:

how-do-i-truncate-a-string-with-[....remove from here...]10

3 个答案:

答案 0 :(得分:1)

先截断,然后附加自动增量值。

或者做这样的事情:

$maxlength = 30;
$number = 1234567;
$string = "how-do-i-truncate-a-string-with-dynamic-length-url-slug";
$slug = substr($string, 0, $maxlength - strlen($number) - 1)."-".$number;

答案 1 :(得分:1)

这是一种方法:

$slug = "how-do-i-truncate-a-string-with-dynamic-length-url-slug-10"
$maxlen = 100;
if (strlen($slug) > $maxlen) {
    $idlen = strlen($slug) - strrpos($slug, '-'); // how long is the "-10" part?
    $id = substr($slug, -$idlen);
    $slug = substr($slug, 0, $maxlen - $idlen).$id;
}
echo $slug;

如果$maxlen恰好具有特定值,则此代码最终可能会在id之前使用两个连字符。这应该不是问题。

答案 2 :(得分:1)

如果在追加自动增量值之前无法截断:

$slug = explode('-', $slug);

$value = array_pop($slug);

$slug = substr(implode('-', $slug), 0, 99 - strlen($value)) . '-' . $value;