QTextEdit, как удалить html, отформатированный с веб-страницы [дубликат]

Для юристов на языке программирования я просмотрел следующие разделы ECMAScript 5.1 (который легче читать, чем последнее издание), и дойдите до , задав его в списке рассылки ECMAScript ,

TL; DR : все передаются по значению, но свойства объектов - это ссылки, а определение объекта, как правило, отсутствует в стандарте.

Построение списков аргументов

Раздел 11.2.4 «Списки аргументов» говорит следующее о создании списка аргументов, состоящего всего из 1 аргумента:

Вывод ArgumentList: AssignmentExpression оценивается следующим образом:

  1. Пусть ref является результатом оценки AssignmentExpression.
  2. Пусть arg - GetValue (ref).
  3. Возвращает список, единственным элементом которого является arg.

В этом разделе также перечислены случаи, когда список аргументов имеет 0 или> 1 аргумент.

Таким образом, все передается по ссылке.

Доступ к свойствам объекта

Раздел 11.2.1 «Аксессоры свойств»

Вывод MemberExpression: MemberExpression [Expression] оценивается следующим образом:

  1. Пусть baseReference будет результатом оценки MemberExpression.
  2. Пусть baseValue будет GetValue (baseReference).
  3. Пусть свойствоNameReference является результатом вычисления выражения.
  4. Пусть свойствоNameValue будет GetValue (свойствоNameReference).
  5. Вызов CheckObjectCoercible (baseValue).
  6. Пусть свойствоNameString будет ToString (propertyNameValue).
  7. If синтаксическое производство, которое оценивается, содержится в коде строгого режима, пусть строгое истинно, иначе пусть строгое будет ложным.
  8. Возвращает значение типа Reference , базовое значение которого baseValue и ссылочным именем которого является свойствоNameString, а флаг строгого режима - строгий.

Таким образом, свойства объектов всегда доступны как рефери се.

On Reference

Описан в разделе 8.7 «Тип ссылочной спецификации», что ссылки не являются реальными типами на языке - они используются только для описания поведения delete, typeof и операторы присваивания.

Определение «Object»

В редакции 5.1 определено, что «Object - это совокупность свойств». Поэтому мы можем заключить, что значение объекта - это коллекция, но что касается того, что значение коллекции плохо определено в спецификации, и требует немного усилий для понимания.

24
задан Nathan Osman 10 May 2010 в 00:56
поделиться

5 ответов

Вы можете попытаться выполнить итерацию строки, используя класс QXmlStreamReader, и извлечь весь текст (если ваша строка HTML гарантируется, что она хорошо сформирована XML).

Что-то вроде этого:

QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
    if ( xml.readNext() == QXmlStreamReader::Characters ) {
        textString += xml.text();
    }
}

, но я не уверен, что его 100% действительное использование QXmlStreamReader API, так как я использовал его довольно давно и может что-то забыть.

11
ответ дан VestniK 23 August 2018 в 02:44
поделиться
  • 1
    Благодарю. Я не пытаюсь проверить его или извлечь. Я просто хочу избавиться от него. – Nathan Osman 10 May 2010 в 00:00
  • 2
    О, и текст, который я получаю , есть из надежного источника (не пользовательского ввода), поэтому я должен быть в порядке. – Nathan Osman 10 May 2010 в 00:01
  • 3
    Вы имели в виду textString вместо textStream? – Alireza Mirian 25 August 2012 в 15:31
  • 4
    yes textString. Исправлена. – VestniK 28 August 2012 в 12:54
  • 5
    Не работает для случая, когда нет никаких html-тегов. Таким образом, textString будет пустой строкой. – Ivan Romanov 10 October 2016 в 11:05

этот ответ для тех, кто прочитал это сообщение позже и использовал Qt5 или новее. просто избегайте html-символов, используя встроенные функции, как показано ниже.

QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.
-3
ответ дан danial weaber 23 August 2018 в 02:44
поделиться
  • 1
    Я не собираюсь скрывать теги, я хочу их удалить. – Nathan Osman 22 September 2015 в 20:22
  • 2
    QString::toHtmlEscaped не удаляет html-теги. Просто преобразует символы, такие как <, > и т. Д., В html-коды. – Marcus 24 March 2017 в 20:36
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
35
ответ дан k06a 23 August 2018 в 02:44
поделиться
  • 1
    Этот ответ будет недостаточным для строк с объектами HTML, например. & Амп; л; – Michael Platings 12 August 2015 в 19:56
  • 2
    Проблема с этим, с моей точки зрения, заключается в том, что <br> удаляется, а не преобразуется в символ новой строки. – Marcus 24 March 2017 в 20:40
  • 3
    @Marcus Итак, что именно задал вопрос. Ни один из HTML не преобразуется ни во что, это совершенно другой запрос – Michael Mrozek 1 October 2017 в 04:42

ситуация, когда какой-то html не совсем проверяет xml, делает его хуже для правильной работы.

Если это допустимый xml (или не слишком плохо сформированный), я думаю, что QXmlStreamReader + QXmlStreamEntityResolver может быть не плохой идеей.

Пример кода в: https: // github. com / ycheng / misccode / blob / master / qt_html_parse / utils.cpp

(это может быть комментарий, но у меня все еще нет разрешения на это)

0
ответ дан user1676531 23 August 2018 в 02:44
поделиться

Если вы не заботитесь о производительности, то QTextDocument делает довольно хорошую работу по преобразованию HTML в обычный текст.

QTextDocument doc;
doc.setHtml( htmlString );

return doc.toPlainText();

Я знаю, что этот вопрос старый, но я смотрел для быстрого и грязного способа обработки неправильного HTML. Парсер XML не давал хороших результатов.

24
ответ дан Vishesh Handa 23 August 2018 в 02:44
поделиться
  • 1
    Я думаю, что это лучший ответ. Он сохраняет базовый формат, как разрывы. – Edwin Rodríguez 12 November 2015 в 13:34
  • 2
    Возможно, немного лучше было бы использовать QTextDocumentFragment: QString plainText = QTextDocumentFragment::fromHtml( htmlString ).toPlainText(); – Marcus 24 March 2017 в 20:43
  • 3
    Вы должны сделать это реальным ответом, а не комментарием. Лучшее решение, я думаю. – Tim Angus 25 January 2018 в 15:29
Другие вопросы по тегам:

Похожие вопросы: