Получите первые n символы строки

Как я могу получить первые n символы строки в PHP? Что самый быстрый путь состоит в том, чтобы обрезать строку к определенному количеству символов и добавить '...' в случае необходимости?

304
задан trejder 6 March 2015 в 05:25
поделиться

7 ответов

//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';

Обновление:

На основе предложения по проверке длины (а также обеспечения одинаковой длины обрезанных и необрезанных строк):

$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;

Таким образом, вы получите строку из максимум 13 символов; либо 13 (или меньше) обычных символов, либо 10 символов, за которыми следует '...'

Обновление 2:

Или как функция:

function truncate($string, $length, $dots = "...") {
    return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}

Обновление 3:

Прошло много времени с тех пор, как я написал этот ответ и Я больше не использую этот код. Я предпочитаю эту функцию, которая предотвращает разрыв строки в середине слова с помощью функции wordwrap :

function truncate($string,$length=100,$append="…") {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n", $string, 2);
    $string = $string[0] . $append;
  }

  return $string;
}
561
ответ дан 23 November 2019 в 01:21
поделиться
if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";
3
ответ дан 23 November 2019 в 01:21
поделиться

substr () было бы лучше всего, вы также захотите проверить длину строки сначала

$str = 'someLongString';
$max = 7;

if(strlen($str) > $max) {
   $str = substr($str, 0, $max) . '...';
}

перенос слов не будет обрезать строку, просто разделите ее ...

0
ответ дан 23 November 2019 в 01:21
поделиться

Расширение Multibyte может пригодиться, если вам нужно управлять кодировкой строки.

$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
  $string = mb_substr($string, 0, $length - 3, $charset) . '...';
}
15
ответ дан 23 November 2019 в 01:21
поделиться

Использовать подстроку

http://php.net/manual/en/function.substr.php

$foo = substr("abcde",0, 3) . "...";
4
ответ дан 23 November 2019 в 01:21
поделиться

Лучше всего абстрагироваться от вашего кода (обратите внимание, что ограничение является необязательным и по умолчанию по 10):

print limit($string);


function limit($var, $limit=10)
{
    if ( strlen($var) > $limit )
    {
        return substr($string, 0, $limit) . '...';
    }
    else
    {
        return $var;
    }
}
1
ответ дан 23 November 2019 в 01:21
поделиться

Фреймворк codeigniter содержит для этого помощник, называемый «текстовый помощник». Вот некоторая применимая документация из руководства пользователя codeigniter: http://codeigniter.com/user_guide/helpers/text_helper.html (просто прочтите разделы word_limiter и character_limiter). Вот две из них, относящиеся к вашему вопросу:

if ( ! function_exists('word_limiter'))
{
    function word_limiter($str, $limit = 100, $end_char = '…')
    {
        if (trim($str) == '')
        {
            return $str;
        }

        preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);

        if (strlen($str) == strlen($matches[0]))
        {
            $end_char = '';
        }

        return rtrim($matches[0]).$end_char;
    }
}

и

if ( ! function_exists('character_limiter'))
{
    function character_limiter($str, $n = 500, $end_char = '…')
    {
        if (strlen($str) < $n)
        {
            return $str;
        }

        $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));

        if (strlen($str) <= $n)
        {
            return $str;
        }

        $out = "";
        foreach (explode(' ', trim($str)) as $val)
        {
            $out .= $val.' ';

            if (strlen($out) >= $n)
            {
                $out = trim($out);
                return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
            }       
        }
    }
}
8
ответ дан 23 November 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: