Управление переносом слов в контейнере - PullRequest
0 голосов
/ 30 июля 2010

У меня особенная проблема.У меня есть группа электронной почты, которая отправляет электронные письма на доску объявлений.Завершение слов электронной почты варьируется.В Yahoo сообщения имеют тенденцию заполнять весь контейнер на доске объявлений.Но во всех других почтовых клиентах заполнена только часть ширины контейнера, потому что оригинальная почта была упакована.Я хочу, чтобы все почтовые сообщения заполняли всю ширину контейнера.Я подумал о двух возможных решениях: CSS или Regex, который устраняет разрывы строк.Поскольку я всего лишь механик гаража (в таких вещах), я просто не могу выполнить работу.Любая помощь?

Вот ссылка, которая показывает проблему: http://seanwilson.org/forum/index.php?t=msg&th=1729&start=0&S=171399e41f2c10c4357dd9b217caaa3f (сравните сообщение «sean» с сообщением «rob». Один заполняет контейнер, другой нет).

Кто-нибудь из вас может подсказать, как получить всю почту, чтобы заполнить контейнер?

Ответы [ 3 ]

0 голосов
/ 30 июля 2010

В зависимости от ситуации (кажется, что люди всегда добавляют 2 разрывов строки между абзацами), вы можете сказать, что проблема заключается в следующем: заменить все новые строки, непосредственно не предшествующие или не сопровождаемые новой строкой, пробелом.

//just to be sure, remove \r's
$string = str_replace("\r",'',$string);
$string = preg_replace('/(?<!\n)\n(?!\n)/',' ',$string);

При разрешении \ r's:

$string = preg_replace('/(?<!\r|\n)\r?\n(?!\r|\n)/',' ',$string);

Редактировать: nevermind: не использовать: хотя люди, как правило, пишут текст своей электронной почты в абзацах, вы будете нарушать свою подпись / подпись с помощью этого регулярного выражения. Можно было бы поиграться с минимальной длиной линии, прежде чем считать ее «ломкой» (я выбрал 63), но с трудом это будет:

$string = preg_replace('/([^\r\n]{63,})\r?\n(?!\r|\n)/','$1 ',$string);

Проблема в том, что нет уверенности в том, что разрыв строки не был задуман. Имея неповоротливую длину строки, вы могли бы основывать ее на средних пользователях, но вопрос заключается в следующем: что они больше возражают: различия между разрывными и неразрывными параграфами или разрывом их подписей?

0 голосов
/ 30 июля 2010

Спасибо, что так быстро вернулись!

На форуме используется php (а также CSS).Единственная проблема в том, что я несколько ограничен в своих способностях возиться с его программированием.Если я собираюсь сделать это на моем текущем уровне мастерства, у меня есть только один из двух вариантов:

  1. с использованием preg-replace в php.Доска обсуждений позволяет нам делать это с панели управления.Так что, если бы я мог сделать это с одним оператором preg-replace, он должен работать.

Сработает ли решение Wrikken, если я не удаляю \ r?Потому что это похоже на точку.(можно ли добавить \ r в preg-replace?)

Я надеялся, что решение может прийти через какое-то свойство css.Я думаю, это невозможно.

Большое спасибо за вашу помощь!

[ПРИМЕЧАНИЕ: большое спасибо за вашу помощь!Решение сработало !!!Я изменил номер на 53 или около того.Это должно было быть немного меньше.Мне все равно, что редкие, длинные строки подписи могут потерять возврат каретки.Это небольшая цена за полный текст сообщения!Вы легко сэкономили мне несколько дней на изучении чего-то, что должно было быть умеренно разочаровывающим.Я рад от помощи, которую я получил здесь.]

0 голосов
/ 30 июля 2010

Вы дали слишком мало информации - какой язык программирования вы используете - PHP / Javascript / что-нибудь другое?

Я думаю, вам нужно только заменить \ n, \ r и \ r \ n пробелами.Код PHP для этого:

$nowrap = str_replace('\r\n', ' ', $nowrap);
$nowrap = str_replace('\r', ' ', $nowrap);
$nowrap = str_replace('\n', ' ', $nowrap);

Вы можете сделать это аналогично на других языках (для JS см. Метод string.replace: http://www.tizag.com/javascriptT/javascript-string-replace.php).

...