Приветствую,
Недавно дописал движок, но осталась в нем одна неточность, не дающая мне покоя. Одна из функций там - генерирование столбца, в котором показывается рандомная недвижиость. А точнее, картинка и текст. Текст, естественно, не целиком, а только его часть, после которой идет многоточие. Но проблема в том, что текст изобилует html тегами, поэтому бывают загвоздки вроде того, что текст возвращается в таком виде:
Цитата |
Какой-то текст, какие-то 100 символов, а потом <... |
Примерно так. Выходит, что тег, к примеру <br />, обрезается в неадекватных местах и получаются такие некрасивости, как в цитате.
Я использовал обычный substr
$desc = substr($row['desc_en'], 0, 100);
Думаю, правильнее будет использовать регулярные выражения, только вот никак не могу придумать чего-нибудь толкового.
Помогите, добрые люди
Nikitian
3.09.2010 - 19:17
Проверьте, действительно ли нужны эти тега там. Обычно анонс не форматируется, а тогда задача упрощается до substr(strp_tags()). Регулярками там либо никак, либо монструозно имхо. Можно в цикле проходить по тексту посимвольно, но это ни раз уне экономно к скорости обработки.
DedMorozzz
3.09.2010 - 20:17
тебе надо что бы не попадали ХТМЛ теги, после 100 символов?
Nikitian, вовсе не "монструозно" будет...
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Порвется тег.
<b> тут сто символов </b>
получится тег незакрытый.
Убрать их все из превью и не мучаться.
Nikitian дело говорит.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
DedMorozzz
3.09.2010 - 20:59
Порванный тег для отображения - не повлияет. Главное, что бы на границе не было его. Так что проверять можно, что перед 100 символами и что после лимита. Это вполне реально
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Ну как не повлияет...
<b> тут сто символов
всё остальное (весь сайт) будет жирным
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
DedMorozzz
3.09.2010 - 21:05
Угу, есть такое дело. Ну для этого можно сделать так: смотреть если на "границе" тег, тогда делать не 100, а 103 символа. Ибо в превьюшке, вряд ли будут теги "тейбл" и прочее. Лишь : Б, У, С.
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
А если нету? Если закрывающий тег после 200-го символа? А если открытых несколько?
<b>вот <span style="color:red">тут сто символов</span> а тут еще сто </b>
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
DedMorozzz
4.09.2010 - 11:15
Ха
Да какая разница
Если в промежутке не было, в 100 символов. То нас не интересует, что дальше! Ибо отображается лишь 100! С начала до 100. Ранее быть не может(и нам это не интеерсно), а позже - пусть будут. Мы их не берём
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Ничего не понял из твоей тирады. Я спросил, как поступить, если текаст такой:
<b>вот <span style="color:red">тут сто символов</span> а тут еще сто </b>
Ведь обрежет так:
<b>вот <span style="color:red">тут семдесят символов
как быть с незакрытыми тегами?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
DedMorozzz
4.09.2010 - 16:05
проверять есть ли в захватываемом участке начиабщие теги. Если есть - тогда искать закрывающий. Если закрывающего не найденно - удалять начинающий. Всё
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
И как это сделать регуляркой?
Это посимвольный анализ, и причем очень непростой нужен. С bb-тегами проще, я
тут описывал. А с HTML не стоит овчинка выделки мне кааца...
Покаж, как ты это представляешь, может я действительно усложняю все
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
DedMorozzz
4.09.2010 - 16:43
Итого, теги, которые могут быть и могут влиять на отображения это: i,s,u и пусть будет span.
preg_repalce ('#(.*?)<(i|s|u|span).*?>(.*?)(?!\\2)(.*)#','$1$3$4',$text);
логика примерно таковая будет. Лишь надо будет указать длину обрезания и так далее. Но сам ВОПРОС - примерно вот так вот будет выглядеть.
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Не, ну с тремя-четырьмя тегами не вопрос.
У топикстартера же написано:
Цитата |
Но проблема в том, что текст изобилует html тегами, |
В том и беда.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
DedMorozzz
4.09.2010 - 18:31
(i|s|u|span) можно заменить на [A-z]+
Но тогда, к примеру кусок ХМЛ не пройдёт, его вырежет.
Если там обычный текст - свободно.
И 4 я не зря указал. Ибо это то что может повлиять на отображение
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.