Как я могу усечь строку после 20 слов в PHP?
Как я могу усечь строку до первых 20 слов в PHP?
Ответ 1
function limit_text($text, $limit) {
if (str_word_count($text, 0) > $limit) {
$words = str_word_count($text, 2);
$pos = array_keys($words);
$text = substr($text, 0, $pos[$limit]) . '...';
}
return $text;
}
echo limit_text('Hello here is a long sentence blah blah blah blah blah hahahaha haha haaaaaa', 5);
Выходы:
Hello here is a long ...
Ответ 2
измените число 2
на число 19
ниже, чтобы получить первые 20 слов. Следующее демонстрирует использование 2
для получения первых трех слов: (так измените 2
на 19
, и он даст вам первые 20 слов)
function first3words($s) {
return preg_replace('/((\w+\W*){2}(\w+))(.*)/', '${1}', $s);
}
var_dump(first3words("hello yes, world wah ha ha")); # => "hello yes, world"
var_dump(first3words("hello yes,world wah ha ha")); # => "hello yes,world"
var_dump(first3words("hello yes world wah ha ha")); # => "hello yes world"
var_dump(first3words("hello yes world")); # => "hello yes world"
var_dump(first3words("hello yes world.")); # => "hello yes world"
var_dump(first3words("hello yes")); # => "hello yes"
var_dump(first3words("hello")); # => "hello"
var_dump(first3words("a")); # => "a"
var_dump(first3words("")); # => ""
Ответ 3
К ближайшему пространству
Усекает до ближайшего предшествующего пространства целевого символа. Демо
-
$str
Строка, которая будет усечена -
$chars
Количество символов, которые нужно удалить, может быть переопределено$to_space
-
$to_space
boolean
для того, чтобы усечь из пространства около$chars
limit
Функция
function truncateString($str, $chars, $to_space, $replacement="...") {
if($chars > strlen($str)) return $str;
$str = substr($str, 0, $chars);
$space_pos = strrpos($str, " ");
if($to_space && $space_pos >= 0)
$str = substr($str, 0, strrpos($str, " "));
return($str . $replacement);
}
Пример
<?php
$str = "this is a string that is just some text for you to test with";
print(truncateString($str, 20, false) . "\n");
print(truncateString($str, 22, false) . "\n");
print(truncateString($str, 24, true) . "\n");
print(truncateString($str, 26, true, " :)") . "\n");
print(truncateString($str, 28, true, "--") . "\n");
?>
Выход
this is a string tha...
this is a string that ...
this is a string that...
this is a string that is :)
this is a string that is--
Ответ 4
Простой и полностью экипированный метод truncate():
function truncate($string, $width, $etc = ' ..')
{
$wrapped = explode('$trun$', wordwrap($string, $width, '$trun$', false), 2);
return $wrapped[0] . (isset($wrapped[1]) ? $etc : '');
}
Ответ 5
используйте explode().
Пример из документов.
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
Обратите внимание, что функция explode имеет функцию ограничения. Таким образом, вы можете сделать что-то вроде
$message = implode(" ", explode(" ", $long_message, 20));
Ответ 6
Это не мое собственное творение, его модификация предыдущих сообщений. кредиты идут на karim79.
function limit_text($text, $limit) {
$strings = $text;
if (strlen($text) > $limit) {
$words = str_word_count($text, 2);
$pos = array_keys($words);
if(sizeof($pos) >$limit)
{
$text = substr($text, 0, $pos[$limit]) . '...';
}
return $text;
}
return $text;
}
Ответ 7
Разделите строку (в массив) на <
space >
, а затем возьмите первые 20 элементов этого массива.
Ответ 8
Это выглядит довольно хорошо для меня:
Общая проблема при создании динамических веб-страницы (где контент получен из базы данных, управления контентом системы или внешнего источника, такого как RSS-канал) заключается в том, что входной текст может быть слишком длинным и вызывать макет страницы "сломать".
Одним из решений является усечение текста так что он подходит на странице. Эта звучит просто, но часто результаты не ожидаются из-за слов и приговоры неподходящие точки.
Ответ 9
Попробуйте регулярное выражение.
Вам нужно что-то, что соответствует 20 словам (или 20 границам слов).
Итак (мое регулярное выражение ужасно, так что меня исправьте, если это не точно):
/(\w+\b){20}/
Ответ 10
С тройными точками:
function limitWords($text, $limit) {
$word_arr = explode(" ", $text);
if (count($word_arr) > $limit) {
$words = implode(" ", array_slice($word_arr , 0, $limit) ) . ' ...';
return $words;
}
return $text;
}
Ответ 11
Что-то вроде этого, вероятно, может сделать трюк:
<?php
$words = implode(' ', array_slice(split($input, ' ', 21), 0, 20));
Ответ 12
использовать функцию токенинга PHP strtok() в цикле.
$token = strtok($string, " "); // we assume that words are separated by sapce or tab
$i = 0;
$first20Words = '';
while ($token !== false && $i < 20) {
$first20Words .= $token;
$token = strtok(" ");
$i++;
}
echo $first20Words;
Ответ 13
на основе ответа 動靜 能量:
function truncate_words($string,$words=20) {
return preg_replace('/((\w+\W*){'.($words-1).'}(\w+))(.*)/', '${1}', $string);
}
или
function truncate_words_with_ellipsis($string,$words=20,$ellipsis=' ...') {
$new = preg_replace('/((\w+\W*){'.($words-1).'}(\w+))(.*)/', '${1}', $string);
if($new != $string){
return $new.$ellipsis;
}else{
return $string;
}
}
Ответ 14
Вот что я реализовал.
function summaryMode($text, $limit, $link) {
if (str_word_count($text, 0) > $limit) {
$numwords = str_word_count($text, 2);
$pos = array_keys($numwords);
$text = substr($text, 0, $pos[$limit]).'... <a href="'.$link.'">Read More</a>';
}
return $text;
}
Как вы можете видеть, он основан на ответе karim79, все, что нужно было изменить, заключалось в том, что оператор if также должен был проверять слова, а не символы.
Я также добавил ссылку на основную функцию для удобства. До сих пор он работал безупречно. Благодаря первому поставщику решений.
Ответ 15
Здесь я использую:
$truncate = function( $str, $length ) {
if( strlen( $str ) > $length && false !== strpos( $str, ' ' ) ) {
$str = preg_split( '/ [^ ]*$/', substr( $str, 0, $length ));
return htmlspecialchars($str[0]) . '…';
} else {
return htmlspecialchars($str);
}
};
return $truncate( $myStr, 50 );
Ответ 16
Другое решение:)
$aContent = explode(' ', $cContent);
$cContent = '';
$nCount = count($aContent);
for($nI = 0; ($nI < 20 && $nI < $nCount); $nI++) {
$cContent .= $aContent[$nI] . ' ';
}
trim($cContent, ' ');
echo '<p>' . $cContent . '</p>';
Ответ 17
Это сработало для предложений UNICODE (UTF8):
function myUTF8truncate($string, $width){
if (mb_str_word_count($string) > $width) {
$string= preg_replace('/((\w+\W*|| [\p{L}]+\W*){'.($width-1).'}(\w+))(.*)/', '${1}', $string);
}
return $string;
}
Ответ 18
function getShortString($string,$wordCount,$etc = true)
{
$expString = explode(' ',$string);
$wordsInString = count($expString);
if($wordsInString >= $wordCount )
{
$shortText = '';
for($i=0; $i < $wordCount-1; $i++)
{
$shortText .= $expString[$i].' ';
}
return $etc ? $shortText.='...' : $shortText;
}
else return $string;
}
Ответ 19
Попробуйте ввести код,
$text = implode(' ', array_slice(explode(' ', $text), 0, 32))
echo $text;
Ответ 20
Чтобы ограничить слова, я использую следующий небольшой код:
$string = "hello world ! I love chocolate.";
$explode = array_slice(explode(' ', $string), 0, 4);
$implode = implode(" ",$explode);
echo $implode;
$implot даст: привет мир! I
Ответ 21
как насчет
chunk_split($str,20);
Запись в Руководство по PHP