Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7

Перевод текста в HTML на лету

30.08.2018, 15:27. Показов 4174. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добра форумчане.
Подскажите такой вопрос, как преобразовать текст в html блоки. Но стандартные без <div'ов>.

Допустим, пишу
Code
1
2
Шла Саша по шоссе и сосала сушку. //тут я нажал энтер
Смотри эту скороговорку на https://youtube.com
И приводилось это всё к такму виду
HTML5
1
2
<p>Шла Саша по шоссе и сосала сушку.</p>
<p>Смотри эту скороговорку на <a href="https://youtube.com"></a>https://youtube.com</p>
Сие дело я выполняю в timer_tick, чтобы получить изменения на лету
Replace() мне тут не помог, сначала делал перенос строки тегом <br> но так не нужно.
Делал так
C#
1
rtxt1.Text = rtxt2.Text.Replace("\n", "<br>");
Но теперь нужна другая реализация.

Предполагаю что нужно использовать метод StringBuilder.AppendFormat
Но реализации не знаю, можете подсказать?

P.S. и я не понимаю, как отловить ссылку? по началу вхождения IndexOf? но как тогда понять что ссылка закончилась?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2018, 15:27
Ответы с готовыми решениями:

Перевод из текста в html
Возможно немножко не туда пишу, так что извиняюсь... есть строка допустим, с таким содержимым: &amp;lt;blockquote&amp;gt;Это самый...

Перевод текста из html в bbcode
Здравствуйте. Подскажите, пожалуйста, как я могу перевести текст из html в bbcode. Т.е. у меня есть нечто вроде html редактора, в котором...

Перевод на лету
Извените если не совсем туда тему поместил. предположим пользователь введит в форму данные на русском - а мне необходино сохранить их...

11
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
30.08.2018, 16:53  [ТС]
Такое формирование приводит вот к чему

C#
1
2
3
 string tmpTXT= rTXT.Text;
                string resultTxt = tmpTXT.Substring(tmpTXT.IndexOf(Environment.NewLine) + 1);
                rTXT2.Text = "<p>" + resultTxt + "</p>";

А нужно после каждого переноса. "\n"
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
30.08.2018, 19:43
Лучший ответ Сообщение было отмечено anomal6 как решение

Решение

Цитата Сообщение от anomal6 Посмотреть сообщение
Перевод текста в HTML
C#
1
2
3
4
5
6
        private string Perform(string text)
        {
            text = Regex.Replace(text, "^(.*?)$", "<p>$1</p>\r\n", RegexOptions.Multiline);
            text = Regex.Replace(text, @"http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?", "<a href=\"$0\">$0</a>");
            return text;
        }
Вложения
Тип файла: zip WindowsFormsApplication391.zip (56.5 Кб, 3 просмотров)
1
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
30.08.2018, 21:00  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
C#
1
2
3
4
5
6
private string Perform(string text)
* * * * {
* * * * * * text = Regex.Replace(text, "^(.*?)$", "<p>$1</p>\r\n", RegexOptions.Multiline);
* * * * * * text = Regex.Replace(text, @"http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?", "<a href=\"$0\">$0</a>");
* * * * * * return text;
* * * * }
спасибо Вам большое! просто огромное. Я правда ценю.
Но я ведь так обленюсь.
Я ничего не смыслю в регулярных выражениях. Всегда их пытаюсь обойти.
Могу я Вас попросить прокоментировать немного код для ясности.
я не могу понять почему "^(.*?)$" это перенос строки?

И самое основное КАК @#$%&* ВАШУ ТЕКСТ НА ЛЕТУ ПЕРЕВОДИТСЯ?
за счёт чего? что Вы За ВОЛшЕБНИК то такой??????
простите за эмоции

Добавлено через 6 минут
Я понял Вашу магию. tbResource_TextChanged
Даже не знал что так можно.
0
2 / 2 / 1
Регистрация: 04.01.2018
Сообщений: 24
30.08.2018, 21:10
Цитата Сообщение от anomal6 Посмотреть сообщение
<br>
Может <br/> не очень правильно написали?
Замените и проверьте пожайлуста.

Ой не прочитал)
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
03.09.2018, 09:36  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Перевод текста в HTML
Подскажите, не могу улучшить код.
C#
1
2
3
4
5
6
7
8
 private string Perform(string text)
        {
            
            text = Regex.Replace(text, "^(.*?)$", "<p>$1</p>\r\n", RegexOptions.Multiline);
            text = Regex.Replace(text, @"http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?", "<a href=\"$0\">" + Regex.Match("$0", @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value + "</a>");
        
            return text;
        }
Почему не могу получить заголовок окна?
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
03.09.2018, 09:41
Цитата Сообщение от anomal6 Посмотреть сообщение
Почему не могу получить заголовок окна?
А причем тут браузер и ваше приложение? Нужно искать в HTML заголовок и выводить его уже в вашем приложение.
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
03.09.2018, 10:07  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
А причем тут браузер и ваше приложение?
Идёт замена текста, когда ввожу ссылку в левом txt, например
Code
1
http://site.ru
, в то время в правом txt при помощи регулярного выражения меняется текст на такой
HTML5
1
<a href=http://site.ru>http://site.ru</a>
Так вот, хочу поменять немного алгоритм, чтобы в теге
HTML5
1
<a href=http://site.ru>Тут писался заголовок окна</a>
Пробовал другим методом. При помощи HtmlAgilityPack
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private string Uri(string uri, string title)
        {
            var webGet = new HtmlWeb();
            var document = webGet.Load(uri);
            title = document.DocumentNode.SelectSingleNode("html/head/title").InnerText;
            return title;
        }
 
 private string Perform(string text)
        {
            
           
            text = Regex.Replace(text, "^(.*?)$", "<p>$1</p>\r\n", RegexOptions.Multiline);
            text = Regex.Replace(text, @"http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?", "<a href=\"$0\">" + Uri("$0", "") + "</a>");
Ошибка
Code
1
Недопустимый URI: Невозможно определить формат URI."
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
03.09.2018, 10:12  [ТС]
Отдельно код работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
 private string Uri(string uri, string title)
        {
            var webGet = new HtmlWeb();
            var document = webGet.Load(uri);
            title = document.DocumentNode.SelectSingleNode("html/head/title").InnerText;
            return title;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Uri(textBox1.Text, ""));
 
        }
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
03.09.2018, 10:20
Цитата Сообщение от anomal6 Посмотреть сообщение
Пробовал другим методом. При помощи HtmlAgilityPack
Дайте ссылку мне на ваш ресурс, я покажу вам как вытащить значение с помощью HtmlAgilityPack
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
03.09.2018, 10:31  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Дайте ссылку мне на ваш ресурс, я покажу вам как вытащить значение с помощью HtmlAgilityPack
Kazbek17 Вы немного меня не правильно поняли.
Вытащить title я понял как.
Вопрос в другом, как это сделать в регулярном выражении?

Вот код
C#
1
text = Regex.Replace(text, @"http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?", "<a href=\"$0\">$0</a>");
Когда мой текст будет
Code
1
http://site.ru
Регулярка поменяет текст на такой
Code
1
<a href=http://site.ru>http://site.ru</a>
Моя задача же состоит в том чтобы между тегами поставить заголовок (ЛЮБОГО САЙТА)
Пишу так
Code
1
https://www.cyberforum.ru/
А регулярка должна привести к такому выводу
Code
1
<a href=http://site.ru>Форум программистов и сисадминов Киберфорум</a>
Вопрос!!! как это сделать, как изменить код, чтобы выводился заголовок

C#
1
text = Regex.Replace(text, @"http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?", "<a href=\"$0\">"/*ЗДЕСЬ ДОЛЖЕН БЫТЬ ЗАГОЛОВОК А НЕ ССЫЛКА*"/</a>");
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
03.09.2018, 11:03
Лучший ответ Сообщение было отмечено anomal6 как решение

Решение

Цитата Сообщение от anomal6 Посмотреть сообщение
писался заголовок окна
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Collections.Concurrent;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
 
 
namespace WindowsFormsApplication391
{
    public partial class Form1 : Form
    {
        private const string URL_REGEX = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w-\./?%&=]*)?";
        private DateTime timeToLoadURL;
        private string text = "";
        private ConcurrentDictionary<string, string> urlToTitle = new ConcurrentDictionary<string, string>();
 
        public Form1()
        {
            InitializeComponent();
 
            ThreadPool.QueueUserWorkItem(LoadUrlLoop);
        }
 
        private void LoadUrlLoop(object state)
        {
            while (true)
            {
                Thread.Sleep(100);
                if (timeToLoadURL > DateTime.Now)
                    continue;
 
                foreach (Match m in Regex.Matches(text, URL_REGEX))
                {
                    var url = m.Value;
                    if (urlToTitle.ContainsKey(url))
                        continue;
                    try
                    {
                        var html = new WebClient().DownloadString(url);
                        var title = Regex.Match(html, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>").Groups[1].Value;
                        urlToTitle[url] = title;
                        BeginInvoke(new MethodInvoker(() =>
                        {
                            tbResult.Text = Perform(tbResource.Text);
                        }));
                    }
                    catch
                    {
                        urlToTitle[url] = url;
                    }
                }
            }
        }
 
        private void tbResource_TextChanged(object sender, EventArgs e)
        {
            tbResult.Text = Perform(tbResource.Text);
            text = tbResource.Text;
            timeToLoadURL = DateTime.Now.AddSeconds(1);
        }
 
        private string Perform(string text)
        {
            text = Regex.Replace(text, "^(.*?)$", "<p>$1</p>\r\n", RegexOptions.Multiline);
            text = Regex.Replace(text, URL_REGEX, (m) =>
            {
                var url = m.Value;
                var title = urlToTitle.ContainsKey(url) ? urlToTitle[url] : url;
                return string.Format("<a href=\"{0}\">{1}</a>", url, title);
            });
            return text;
        }
    }
}
Вложения
Тип файла: zip WindowsFormsApplication391.zip (60.4 Кб, 1 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2018, 11:03
Помогаю со студенческими работами здесь

Как на лету создать и сохранить html файл не сервере?
Здравствуйте. У меня есть вебсервис, работает следующим образом: №1. Пользователь регистрируется на сервисе №2. Выбирает настройки...

Редактирование html файла на лету (вырезание рекламы и другого)
привет есть сайт с большим модулем рекламы реклама не сторонняя а своя - в отдельном блоке подскажите addon для firefox ( или chrome...

Поиск и замена одной строки в html на другую "на лету"
Здравствуйте! Как с помощью javascript в коде html найти и заменить строку: &lt;input class=&quot;submit-btn NoWrap grpelem&quot;...

HTML!? Выравнивание IMG после текста по центру этого текста
как выровнять изображение по центру текста? имеется в виду опустить изображение на пару пикселей, только если исп. margin-top в его css,...

Транслит текста "на лету"
есть код: Public Function transl(ByVal str As String) As String Dim SB As New System.Text.StringBuilder Dim Rus...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru