Я пишу блог, и мне нужна функция, которая показывает отрывок из сообщения. Теперь я использую проверку подстроки, если текст длиннее 503 символов.Сократите предложение и найдите ближайшую точку
Но это часто меняет текст в середине слова И в середине тега HTML, поэтому я оставляю остальную часть страницы наподобие тега наполовину написанного.
То есть: "text text text <strong>Another piece of te [...]
и остальная часть страницы сильны, пока она не попадет в новый сильных закрывающий тег
Я попытался удалить некоторые элементы из поста, но Уны-форматы моего текста
Как.. я иду, чтобы сказать «хорошо, текст 980 символов, вырезать его на 503 +, что еще нужно, чтобы добраться до последней точки (.) или заполнить тег.
Следит мой текущий код:
<?php
$testo_preview = preg_replace("/<img[^>]+\>/i", ' ', $valore->testo);
$testo_preview = preg_replace("/<a[^>]+>/i", '<a>', $testo_preview);
$testo_preview = preg_replace("/<span[^>]+>/i", '<span>', $testo_preview);
$testo_preview = preg_replace("/<div[^>]+>/i", '', $testo_preview);
$testo_preview = str_replace("</div>", '', $testo_preview);
$testo_preview = str_replace("\n", '<br>', $testo_preview);
?>
<?php if(strlen($testo_preview) >= 503): ?>
<?= substr($testo_preview, 0, 503).' [...]' ?>
<?php else: ?>
<?= $testo_preview; ?>
<?php endif; ?>
Редактировать:
я нашел Pawel ответ будет работать нормально, как это на самом деле "попадает в точку" ...
Мне пришлось изменить новую часть DOMDocument(), поскольку она испортила html-акценты (на итальянском мы используем некоторые акценты, и мне нужно было их остаться). Я превращаю его в функцию, принимая часть кода от Tigger, поэтому я поддержал вас обоих. я придумал простую функцию:
function cleanCut($cutAt, $str){
$next_dot = strpos($str, '.', $cutAt);
if ($next_dot !== false){
// text after default cutoff contains a dot so we need to extend the cutoff
$preview_text = substr($str, 0, $next_dot + 1);
// HTML Cleanup
$preview_text = strip_tags($preview_text);
$preview_text = str_replace("\n", '<br>', $preview_text);
} else {
$preview_text = $str;
}
return $preview_text;
}
Он работает отлично и хорошо. Только иногда не доходит до точки (когда есть длинная ссылка), но это может быть хорошо. Теперь, как вы видите из функции, я попытался заменить \n
на <br>
, так как это единственный тег, который я действительно хочу, но он не работает. Любая идея о том, почему?
http://stackoverflow.com/a/1732454/1180785 – Dave
После редактирования: Изменение 'strip_tags ($ PREVIEW_TEXT)' 'до strip_tags ($ PREVIEW_TEXT, '
')' и удалите следующую строку. См. [Руководство по PHP] (http: // php.net/strip_tags) для получения дополнительной информации о 'strip_tags()' – Tigger