@gcj

Как сделать, чтобы ссылки не обрывались?

приветствую, есть такой код:
<?=mb_substr($post->answer, 0, 400,'UTF-8'); ?> <?='... '; ?>


который обрезает текст в указанных пределах, но проблема заключается в том, что если на том месте, где должен произойти разрыв - попадается ссылка, то она тоже обрезается, как результат - куча битых ссылок на страницах.

вопрос: как сделать чтобы конструкция <a href="#">Здесь анкор</a> из БД вытягивалась полностью, т.е. считалась одним целым словом.

буду очень и очень признателен за любые подсказки.
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ответы на вопрос 3
@WQP
оборачивайте в strip_tags

<?=mb_substr(strip_tags($post->answer, '<p><br><i><b><strong>'), 0, 400,'UTF-8'); ?> <?='... '; ?>
Ответ написан
@MadridianFox
Web-программист, многостаночник
Ну так из БД она и вытягивается целиком. Обрезание происходит в при выводе на страницу.
Я не знаю как это сделать быстро и грамотно, но на ум приходит поиск позиции начала и конца тегов ссылок регуляркой. Если вдруг оказывается что ссылка начинается до 400 символа, а заканчивается после, то значит она обрежется. В этом случае мы обрезаем не по 400, а по конец этой ссылки. Если у ссылок длинные анкоры, то можно немного посчитать и обрезать анкор внутри ссылки, сохраняя её функциональность.
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
if(mb_stripos ($string,"<a") < 400){
    $sub = explode("</a>",$string); 
    $sub = $sub[0]."</a>";  // если надо добивать до 400 после ссылки, надо еще считать позицию "<a>", и от нее добивать до 400, думаю реализуете сами
}
else {
    $sub = mb_substr($string, 0, 400,'UTF-8');
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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