столкнулся с такой траблой: в базе хранится текст обработанный через htmlspecialchars, при выводе текста нужно сделать своего рода привью подрезав текст под определенную длинну, но так как внутри текста могут встречаться закодированные символы типа > то при подрезке может случиться так что влезет лишь &g и само собой суровый html/xml будет кричать на это, у меня есть пара вариантов но они слишком ресурсоемкие для такой простой проблемы, возможно у кого то есть уже написанный и используюмый код для обхода этой траблы?
Engineer 1) не храните в базе текст обработанный htmlspecialchars. 2) PHP: htmlspecialchars(substr(htmlspecialchars_decode($str),0,120));
PHP: $data = substr($text, 0, 200); $i = strlen($data) - 1; while($data[$i] != ' ' && $data[$i] != "\n" && $data[$i] != "\r" && $data[$i] != "\t") { $data[$i] = "\0"; } Преимущество такого варианта: не будет обрубленных слов
Можно проще: Code: $r=wordwrap($text, 20, '<br />');// переносит строку, не разрывая слов $r2=explode('<br />',$r); $result=$r2[0]; В $result получится строка, ровно обрезанная под нужную длину, не обрезав слов.
Почему? На мой взгляд лучше функцию использовать один раз при записи и не париться с многочисленным выводом ежели наоборот.
Engineer чтобы впоследствие не возникали вопросы как этот. И чтобы не портить данные в базе. И чтобы была привычка все ВЫВОДИМЫЕ данные обрабатывать, а то понадеетесь что в базе все обработано, а какая нить переменная не проинициализирована.