Forum Webscript.Ru
Программирование => Perl => Тема начата: Ardzhan от 26 Апреля 2002, 14:41:48
-
Возник такой вопрос! Браузер переносит слова по пробелам. А если написать "одно длинное слово", то дизайн в гостевой книге будет испоганен, появится горизонтальная прокрутка! Как с этим можно бороться?
-
Как с этим можно бороться?
Делить длинные слова.
Либо просто ограничивая длину строки, либо учитывая переносы и т.д.:)
-
А как их делить? Я на PHP где-то видел такую функцию. У перла есть аналоги?
-
$text=wordwrap($text, 20, "\\n", 1); - это на пхп
-
use Text::Wrap
$Text::Wrap::columns = 12;
$text1="eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
print wrap(\'\', \'\', $text1);
выдает:
eeeeeeeeeee
eeeeeeeeeee
eeeeeeeeeee
eeeeeeeeeee
eeeeeeee
-
use Text::Wrap
Или по простому - регулярным выражением пройтись.:)
-
Или по простому
Ага! И главное никакой разницы - что в Perl что в PHP ...
Читайте доки по регэкспам бо они рулез! :)
-
Спасибо. А без подключения модуля? Извиняюсь за назойливость... может кто делал?
-
$text=~s/(\\S{30})/$1 /g;
все что длинее 30 символов порубит
другое дело, что могут быть проблемы со ссылками..
-
Альтернатива :)
#!/usr/bin/perl
print "Content-type: text/html\\n\\n";
$preform=10;#допустимое кол-во символов в строке
$text="http://my_domen.com/my_domen.com/my_domen.com/my_dome";
if (length($text)>$preform){&format_text}
print $text;
sub format_text {
@text=split(//,$text);$n=1;
foreach $text (@text){
$format_text="$format_text$text";
if ($n==$preform){$format_text="$format_text
";$n=0;}$n++}
$text=$format_text }
-
$text="http://my_domen.com/my_domen.com/my_domen.com/my_dome";
if (length($text)>$preform){&format_text}
не подойдет, т.к. текст, по идее, будет содержать не одну лишь строку длиной в полкилометра, а много разных слов, и там символов может быть и более 10, например:
$text="domen.com вася убежал за угол, козел он!";
-
$text=~s/(\\S{30})/$1 /g;
все что длинее 30 символов порубит
другое дело, что могут быть проблемы со ссылками..
Убираем проблемы со ссылками:
s|([^ \\/\\\\]{30})|$1 |g;
-
Убираем проблемы со ссылками:
s|([^ \\/\\\\]{30})|$1 |g;
В принципе тоже не решение, можно и длинной ссылкой растянуть дизайн. Нужно делать как в этом форуме - ссылку укорачивать и вставлять в href.
Но это одним regexpом не сделать.
-
Но это одним regexpом не сделать.
Можно сделать, но сразу говорю, что писать его не буду.:)
-
Но это одним regexpом не сделать.
Можно сделать, но сразу говорю, что писать его не буду.
наверное лучше/проще двумя, например чуть лучший вариант:
1. режем все что вне тегов:
$text~=s/>([^><]{30})>$1
2. уже это:
$text~=s|([^ \\/\\\\]{30})|$1 |g;
конечно возможен такой вариант баловства:
-
Спасибо большое! Принцип понятен. Теперь гадить в гостевой не будут :)
P.S. Предлагаю поместить эту тему в FAQ!
-
$text="http://my_domen.com/my_domen.com/my_domen.com/my_dome";
if (length($text)>$preform){&format_text}
не подойдет, т.к. текст, по идее, будет содержать не одну лишь строку длиной в полкилометра, а много разных слов, и там символов может быть и более 10, например:
$text="domen.com вася убежал за угол, козел он!";
Ну а что мешет брать по одному слову из всех, чикирить его на соответствие и выводить на печать. Потом для ссылок в гостевых книгах предусмотрено специальное поле....