X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> Как скрыть лишние символы в строке?
Licoric
Licoric
Topic Starter сообщение 26.7.2011, 19:48; Ответить: Licoric
Сообщение #1


Собственно мне надо сделать так:
Есть запись. Если в ней больше 300 символов, то выводить первые 300, допустим и дописывать "читать далее". Если меньше, то выводить целиком.
Проблема в том, что если в записи встречаются открытые теги в первых 300 символах, но нет закрывающих, то теги так и выводятся кодом. Жирный шрифт, например. Вместо него будет просто в тексте <b> и так далее.
В общем стоит вопрос о скрытии лишнего. Вот задаюсь вопросом "как?". В какую сторону копать?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
mamchyts
mamchyts
сообщение 26.7.2011, 20:25; Ответить: mamchyts
Сообщение #2


В таком случае, нужно перед отображением сделать

if(strlenght($str) > 300)
{
$str = strip_tags($str);
$str = substr($str, 0 , 300);
$str .= '<a>читать далее</>';
}

echo $str;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 26.7.2011, 20:28; Ответить: Licoric
Сообщение #3


strip_tags
Эта функция возвращает строку str, из которой удалены HTML и PHP тэги.

А если мне надо сохранить форматирование? Вставленные картинки в начале текста, шрифты жирный и курсив? Абзацы? Может это и подходит, но это не совсем в тему.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
adlic
adlic
сообщение 26.7.2011, 20:30; Ответить: adlic
Сообщение #4


(mamchyts @ 26.7.2011, 23:25) *
В таком случае, нужно перед отображением сделать

Лучше сначала $str = strip_tags($str);, а потом уже считать длину строки, так как теги тоже учитываются как символ.
Картинки, ссылки, элементарное редактирование можно записать в исключения:
[PHP]strip_tags($str, "<img>,<a>,</a>, <b>, </b>, <i>, </i>, <s>, </s>, <p>, </p>");[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 26.7.2011, 20:34; Ответить: Licoric
Сообщение #5


Мне не принципиально 300 символов. Я потом это допилю. Просто хочется выводить текст красиво.
*Я хочу потом сделать так, что если число оставшихся символов меньше 200, тогда выводить текст целиком. Просто потому, что читать за "далее" 3-5 лишних слов - не удобно. Как в контакте сейчас. Там постоянно прячется за "читать далее" 2-3 слова.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
mamchyts
mamchyts
сообщение 26.7.2011, 20:51; Ответить: mamchyts
Сообщение #6


[PHP]
if(strlenght(strip_tags($str)) > 200)
{
$str = strip_tags($str, "<img>,<a>,</a>, <b>, </b>, <i>, </i>, <s>, </s>, <p>, </p>");
$str = substr($str, 0 , 100);
$str .= '<a>читать далее</>';
}

echo $str;
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 26.7.2011, 21:17; Ответить: Licoric
Сообщение #7


хотелось бы что-то универсальное. Ибо тэги могут быть и другими. Ну или хотя бы еще одно решение на пхп. Мне думается, что это не совсем то...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 26.7.2011, 21:21; Ответить: alexdrob
Сообщение #8


ну тогда считайте открытые теги все, и закрывайте в обратном прядке который не закрыты)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 26.7.2011, 21:30; Ответить: Den1xxx
Сообщение #9


(alexdrob @ 27.7.2011, 00:21) *
ну тогда считайте открытые теги все, и закрывайте в обратном прядке который не закрыты)

Кстати да - http://jehy.ru/articles/2008/10/26/php-close-open-html-tags/
[PHP]function close_dangling_tags($html){
#put all opened tags into an array
preg_match_all("#<([a-z]+)( .*)?(?!/)>#iU",$html,$result);
$openedtags=$result[1];
#put all closed tags into an array preg_match_all("#</([a-z]+)>#iU",$html,$result);
$closedtags=$result[1];
$len_opened = count($openedtags);
# all tags are closed
if(count($closedtags) == $len_opened){ return $html; }
$openedtags = array_reverse($openedtags);
# close tags
for($i=0;$i < $len_opened;$i++) {
if (!in_array($openedtags[$i],$closedtags)){
$html .= '</'.$openedtags[$i].'>';
} else { unset($closedtags[array_search($openedtags[$i],$closedtags)]);
}
} return $html;
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 26.7.2011, 21:33; Ответить: alexdrob
Сообщение #10


вот только, может и пол тега картинки отрезать :D
значит ещё вначале нужно проверить открытые < и не закрытые, и удалить а потом уже закрывать
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Большие ставки для кликов в Я.Директ. Как удешевить?
2 rownong27 1124 26.3.2024, 14:13
автор: knezevolk
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
12 uahomka 2297 25.3.2024, 6:52
автор: Skyworker
Открытая тема (нет новых ответов) Как отозвать банковский платеж фрилансеру?
28 metvekot 3920 25.3.2024, 6:34
автор: Skyworker
Открытая тема (нет новых ответов) Как вывести деньги в Украине с заблокированного Юмани ?
23 freeax 3646 24.3.2024, 20:55
автор: Liudmila
Открытая тема (нет новых ответов) Через какой браузер и как можно найти в кэшэ браузера видео
10 Room 1943 23.3.2024, 7:41
автор: Room


 



RSS Текстовая версия Сейчас: 29.3.2024, 12:43
Дизайн