|
|
|
| Из textarea приходит текст. В нем могут быть http://что-нибудь
Как из пришедшего текста получить текст, в котором текстовые ссылки исправлены на html'ные? То есть, пришло:
"Заходите на http://www.www.www/qqq.html"
А должно стать
"Заходите на <a href='http://www.www.www/qqq.html' target='_blank'>http://www.www.www/qqq.html</a>"
И второй вопрос... Если в текстареа человек пишет - все нормально. Если же копирует откуда-то, то текст - без переносов. Мой метод это правит, но он не слишком мне удобен. Возможно, есть какие-нибудь еще? | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.06.2005 в 22:28)
| | Попробуйте так:
<?
$str = "sffsdfsda http://www.www.www/qqq.html adsadf";
$str = preg_replace("/(http:\/\/[^\s]+)/", "<a href='$1' target='_blank'>$1</a>", $str);
print $str;
?>
|
Один нюанс: после ссылки должен стоять пробел, перенос строки или табулятор. | |
|
|
|
|
|
|
|
для: antf
(07.06.2005 в 22:48)
| | >> Если же копирует откуда-то, то текст - без переносов.
Что вы имеете в виду под переносами? | |
|
|
|
|
|
|
|
для: antf
(07.06.2005 в 22:49)
| | Enter. Если он нажимается в текстареа - все нормально. Но если текст копируется откуда-либо....
И еще одна проблема - нет сохранения форматирования текста из текстареа... Т.е., пробелы довольно скудные - если человек нажал десять раз на пробел, то в приходящей переменной будет все равно только один пробел... А то и вообще не будет. Во, сформулировал! Отсутствуют красные строки. | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.06.2005 в 22:56)
| | 1) С переводами строки все плохо. Откуда машина узнает, где они нужны :) ? Вот если бы найти четкий формальный признак, например, ставить переводы строк после ссылок... Хотя если текст вставляется из буфера обмена, то переводы строк должны сохраняться.
2)
>>И еще одна проблема - нет сохранения форматирования текста из текстареа... Т.е., пробелы довольно скудные - если человек нажал десять раз на пробел, то в приходящей переменной будет все равно только один пробел... А то и вообще не будет. Во, сформулировал! Отсутствуют красные строки.
А вы попробуйте заключать абзацы в теги:
<?
//содержимое вашего поля textarea
$textarea = $_POST['textarea'];
$textarea = "<div style='padding-left:20px'>".$textarea."</div>";
$textarea = str_replace("\n", "</div><div style='padding-left:20px'>", );
?>
|
| |
|
|
|
|
|
|
|
для: antf
(07.06.2005 в 23:21)
| | Хмм... Это дело будет на почту рассылаться... как-то div там неуместен... на мой взгляд. Или я ошибаюсь?
А с регулярным - работает все правильно, благодарю. | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.06.2005 в 22:56)
| | Модераторам: Послал предыдущий ответ еще раз. Удалите это сообщение. | |
|
|
|
|
|
|
|
для: antf
(07.06.2005 в 23:21)
| | Удалите только лишние пробелы:
<?
$str = preg_replace("/ {2,}/", " ", $str);
?>
|
PS Видно все неудобство спецсимвола \s, переводы строки нам заменять не надо, приходится делать регулярное выражение менее читабельным, используя пробел напрямую, хотя если проделывать это после замены \n на теги, можно сделать так:
<?
$str = preg_replace("/\s{2,}/", " ", $str);
?>
|
| |
|
|
|
|
|
|
|
для: antf
(07.06.2005 в 23:40)
| | Вы хотите сказать, что второй вариант много более читабелен? :)
Но тем не менее, ни один из них - не сработал.
$str=preg_replace("/(http:\/\/[^\s]+)/", "<a href='$1' target='_blank'>$1</a>", $str);
$str=nl2br(stripslashes($str));
$str=preg_replace("/ {2,}/", " ", $str);
|
и
$str=preg_replace("/(http:\/\/[^\s]+)/", "<a href='$1' target='_blank'>$1</a>", $str);
$str=nl2br(stripslashes($str));
$str=preg_replace("/\s{2,}/", " ", $str);
|
оба дали безкраснострочный текст. И безпроизвольнопробельный. | |
|
|
|
|
|
|
|
для: Shorr Kan
(08.06.2005 в 00:07)
| | >оба дали безкраснострочный текст. И безпроизвольнопробельный.
Хм... но эти строки не дадут такой результат. Они убирают "лишние" пробелы и оставляют только один пробел. А вам нужно наоборот, как я понял.
$str=preg_replace("/ {2,}/", " ", $str);
$str=preg_replace("/\s{2,}/", " ", $str);
|
| |
|
|
|
|
|
|
|
для: Shorr Kan
(07.06.2005 в 22:56)
| | >И еще одна проблема - нет сохранения форматирования текста из текстареа... Т.е., пробелы довольно скудные - если человек нажал десять раз на пробел, то в приходящей переменной будет все равно только один пробел...
Это свойство HTML. Сколько бы пробелов не было - отображен будет только один.
Для того, чтобы полностью сохранить пользовательское форматирование (пробелы и переводы строк) при выводе на страницу заключите выводимый текст в теги <pre>
<?
echo "<pre>";
echo $msg;
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.06.2005 в 04:43)
| | Отлично, спасибо. Но если у человека в почтовом клиенте включен текстовый режим... Могут отображаться все теги текстом. Можно этого избежать? | |
|
|
|
|
|
|
|
для: Shorr Kan
(08.06.2005 в 08:28)
| | Ай, совсем забыл, что у вас почта.
А ведь в этом случае, письмо как бы в 2 вариантах "пишут".
1 - обычный текст. В этом виде пробелы должны отобразиться "как есть".
2 - вложение в виде HTML-странички.
По умолчанию, должна открыться html-страница. Если человек переключит на текстовый режим, то ему отобразиться письмо в виде текста. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.06.2005 в 08:43)
| | Хм... Я не совру, если скажу что мне малопонятно, как можно написать письмо в двух вариантах. | |
|
|
|
|
|
|
|
для: Shorr Kan
(08.06.2005 в 15:48)
| | Про 2 варианта - это я запутал, конечно.
Обычное письмо, но в качестве вложения идет HTML-страница, в котором повторяется сообщение, набранное в теле письма.
Про отправку письма с вложением можно почитать по следующим ссылкам
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=990
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3700
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3935 | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(09.06.2005 в 04:33)
| | Ага, ясненько... А как в обычном письме (тексте) хоть какие-то переносы поставить? Чтоб не сплошным текстом. \r\n ? | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.06.2005 в 04:38)
| | \n | |
|
|
|