Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Пользовательский ввод - не позволить рвать страничку.

Ответить
Настройки темы
Пользовательский ввод - не позволить рвать страничку.

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


В самом деле - проклятие . Доброго времени суток всем.
Опишу задачку. Имеется табличка оформляющая, скажем, комментарий пользователя по какому-нибудь творению, в общем комментарий:

******************************
* * * * * * * * * * * * * * * * * * * * * * * * * **
* * *ник * * * ** ** * * * *о себе * * ** * * *
* * * * * * * * * * * ** * * * * * * * * * * * * * *
******************************
* * * * * * * * * * * ** * * * * * * * * * * * * * **
* * * * * * * * * * * ** * * * * * * * * * * * * * **
* * * * * * * *комментарий * * * * * * ** * **
* * * * * * * * * * * * * * * * * * * ** * * * * * **
* * * * * * * * * * * * * * * * * * * ** * * * * * **
******************************

Таким образом, если все нормально, то все собственно и нормально . Таблица не едет, страничку не рвет. Но стоит человеку ввести в поле "фио" строку не содержащую ни одного пробела, пусть даже и допустимой длины (естественно, что все поля имеют такое ограничение), то ячейка [1, 1] растягивается и тащит вправо ячейку [1, 2], что сказывается и на ячейках [2, *]. В итоге табличка имеет уже не те размеры какие задумывались и вся страничка выглядит как после направленного взрыва .

Вопрос собственно в том, чтобы предотвратить такую катастрофу. Можно вставлять пробелы через каждые X символов, но не слишком приятно видеть свое отчество как-нибудь так: "Стани слав", не идет. Какие символы не дают визуальных разрывов строки, но дают знать броузеру, что строку можно перенести - высота таблицы не имеет ограничения.

Какие варианты, господа?

[s]Исправлено: Prisoner, 6:17 19-08-2004[/s]

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 06:10, 19-08-2004

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата:
Какие символы не дают визуальных разрывов строки, но дают знать броузеру, что строку можно перенести
То есть?? Ведь строку нужно всё равно разбивать, чтобы её перенести, мы же переносим отдельные части строки.
Возможен такой вариант: использовать знак переноса, чисто на воприятие строка не разбита, но перенесена, то есть: есть такая знаменитая фамилия Череззаборногозадерищенский, а если дальше ещё идёт Афанасий Матвеевич-то это слишком длинно, поэтому мы разрешаем максимум 20 символов в одной строке, и если в этой строке не последовало спейса, то ставим после 20 символа знак переноса "-" а всю остальную часть пишем с новой строки.
Если же совсем углубиться в проблему, можно написать функцию, которая будет переносит по правилам русского языка, то есть по слогам (там вроде несложные правила )  (если такое ещё не написано)

-------
Fortes fortuna adiuvat


Отправлено: 11:54, 19-08-2004 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


У меня была аналогичная проблема. С одной стороны наджо была не дать злым хакерам вставлять длинное-длинное слово и портить вид таблицы, с другой - надо было не разбивать длинные слова. В результате я разбиваю текст на слова и проверяю размер каждого(понятно, что 90 и 55 - это под размеры моей таблицы ):
Код: Выделить весь код
function string_display_value($value, $n=90) {
    // вставляем разбиение длинного текста на слова	
    
    $words = explode (" ", $value);
    $new_value='';	
    while (list ($key, $val) = each ($words)) {
	if(strlen($val) > 55) // если длина одного слова... 
                     $val = wordwrap($val, $n, "\n", 1);
	$new_value.=$val. ' ';
    }
    return $value == '' ? '<br>' : htmlspecialchars($new_value);
}

Отправлено: 13:19, 19-08-2004 | #3

pauluss


Сообщения: n/a

Профиль | Цитировать


Прошу пардона за оффтоп. Не могли бы вы пояснить последнюю строчку. Никогда не использовал такие конструкции.
Код: Выделить весь код
return $value == '' ? '<br>' : htmlspecialchars($new_value);
Эквивалентно ли это такой записи?
Код: Выделить весь код
if($value=="")
    return"<BR>";
else
    return htmlspecialchars($new_value);
Что же касаемо темы беседы, то тут что-то к сказанному добавить ничего не могу. Кроме того, что рвать строчки там, где можно, врядли что то получится придумать.

Отправлено: 17:51, 25-08-2004 | #4

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


pauluss
Цитата:
Эквивалентно ли это такой записи
да оно и есть, просто когда строка небольшая, так бывает проще писать - читать. (а вообще это дело вкуса )

Отправлено: 22:20, 25-08-2004 | #5



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Пользовательский ввод - не позволить рвать страничку.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Верстаем страничку... elena45 Вебмастеру 16 16-07-2009 15:53
Защитить страничку вконтакте Vienna7 Защита компьютерных систем 2 29-05-2009 01:03
Первые результаты PDC 2008 – пользовательский интерфейс Windows 7 OSZone News Новости и события Microsoft 15 31-10-2008 11:27
Как позволить потребителю менять Database в VisualBasic6 Miho Программирование и базы данных 1 12-10-2003 16:08
Увидеть свою страничку Trojn Вебмастеру 11 31-07-2003 14:25




 
Переход