Консультация № 72921
27.01.2007, 21:20
0.00 руб.
0 3 3
Здравствуйте!
Помогите решить проблему. Написал минифорум. Все хорошо работает. Но когда я попытался испробовать его в кретических условиях, то понял как он несовершенен.
Если сообщение посетителя содержит в себе очень большое слово (или неразделимый набор букв), то таблица раздвигается и выходит за границы браузера.
Скрипт приводить небуду, но опишу алгоритм:
Сообщение из формы очищается от тегов, затем символы новой строки заменяются на
. Последнее действие нужно для того, чтобы все данные можно было хранить в файле, в виде стороки.
...из файла строка вставляется в таблицу которая заключена в теги <div> с форматированием по широте.
Когда текст обычный, то все прилично выглюдит. Но нехочу чтобы какой-нибудь ламер ввел набор букв (длинные слова) и страница форума была искалечена (появилась горизонтальная прокрутка).
-----------------------------------------------------------------
Приходит в голову поработать в плотную со строками, на предмет анализа длины слов, но мне кажется это не самый удобный способ. Короче нужно, чтобы длинные слова сами переносились на следующую строку.
-----
Подозреваю что нужно что-то сделать в html, но незнаю что.
Спасибо большое!

Обсуждение

Неизвестный
27.01.2007, 22:03
общий
это ответ
Здравствуйте, Valeraorg!
А если жестко задать ширину страницы(в таблице стилей, например), слово переноситься не будет?
Неизвестный
27.01.2007, 23:52
общий
это ответ
Здравствуйте, Valeraorg!
Можно действительно проверить длину слова, думаю врядли встериться слово более 20 символов. (максимум могу придумать из 18 букв).
В приложении функция которая возвращает <b>TRUE</b> или <b>FALSE</b> в зависимости от длины слов.
Если длина слова более 20 символов то
будет <b>TRUE</b>, если все слова менее 20 букв то будет <b>FALSE</b>.


Приложение:
<?function CheckWords($string){$array=explode(" ",$string); foreach($array as $key => $word) if(strlen($word)>20) return true;return false;}if(CheckWords(‘привет‘))print ‘Ошибка‘;elseprint ‘Всё в порядке‘;?>
Неизвестный
30.01.2007, 07:34
общий
это ответ
Здравствуйте, Valeraorg!
Хочу Вас огорчить, но средства html переносят только слова (т.е. символы, разделённые пробелами). Если жостко ограничить длинну строки, то часть символов (и не только длинного слова) уйдёт за границы вилимости. Решить проблему можно только проверяя длинну слов и принудительно вставляя пробелы в длинные слова (тогда html их и перенесёт)
Для таких действий воспользуйтесь регулярными выражениями РНР
Форма ответа