Как я могу получить первые n символы строки в PHP? Что самый быстрый путь состоит в том, чтобы обрезать строку к определенному количеству символов и добавить '...' в случае необходимости?
//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;
}
if(strlen($text) > 10)
$text = substr($text,0,10) . "...";
substr () было бы лучше всего, вы также захотите проверить длину строки сначала
$str = 'someLongString';
$max = 7;
if(strlen($str) > $max) {
$str = substr($str, 0, $max) . '...';
}
перенос слов не будет обрезать строку, просто разделите ее ...
Расширение 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) . '...';
}
Использовать подстроку
http://php.net/manual/en/function.substr.php
$foo = substr("abcde",0, 3) . "...";
Лучше всего абстрагироваться от вашего кода (обратите внимание, что ограничение является необязательным и по умолчанию по 10):
print limit($string);
function limit($var, $limit=10)
{
if ( strlen($var) > $limit )
{
return substr($string, 0, $limit) . '...';
}
else
{
return $var;
}
}
Фреймворк 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;
}
}
}
}