Функция для очистки текста, отформатированного в html? [Дубликат]

$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`
59
задан Harry 25 June 2013 в 08:04
поделиться

8 ответов

jQuery около 40 раз SLOWER, пожалуйста, не используйте jQuery для этой простой задачи.

function htmlToPlaintext(text) {
  return text ? String(text).replace(/<[^>]+>/gm, '') : '';
}

use:

var plain_text = htmlToPlaintext( your_html );

С угловым.js:

angular.module('myApp.filters', []).
  filter('htmlToPlaintext', function() {
    return function(text) {
      return  text ? String(text).replace(/<[^>]+>/gm, '') : '';
    };
  }
);

использовать:

<div>{{myText | htmlToPlaintext}}</div>  
200
ответ дан Elan Hasson 19 August 2018 в 14:52
поделиться
  • 1
    Я действительно предпочитаю String (текст) .replace (/ & lt; [^ & gt;] + & gt; / gm, ''). Я использую его в течение многих лет без каких-либо проблем. – blockloop 27 January 2014 в 22:47
  • 2
    jQuery в 40 раз медленнее, но вы все равно получаете 8000 ops / s, поэтому не использовать jQuery по этой причине - это преждевременная оптимизация. – Blaise 16 April 2014 в 11:31
  • 3
    Я бы никогда не добавил зависимость jQuery, чтобы преобразовать html в текст, но если мой проект уже использовал jQuery, я бы выбрал решение jQuery, потому что считаю обычное регулярное выражение менее читаемым, менее проверенным и менее надежным. Поддерживает ли ваше регулярное выражение против все возможные формы XSS ? – Blaise 16 April 2014 в 18:57
  • 4
    это не работает с html escaped char? – boh 19 August 2014 в 09:53
  • 5
    Вероятно, вы должны добавить туда нуль-проверку или вывести «null»: return text ? String(text).replace(/<[^>]+>/gm, '') : ""; – Björn 29 April 2015 в 11:54
var app = angular.module('myapp', []);

app.filter('htmlToPlaintext', function()
{
    return function(text)
    {
        return  text ? String(text).replace(/<[^>]+>/gm, '') : '';
    };
});

<p>{{DetailblogList.description | htmlToPlaintext}}</p>
2
ответ дан ajshort 19 August 2018 в 14:52
поделиться
  • 1
    добавьте некоторое форматирование некоторого понимания кода, что помогает генерировать лучшие ответы. – winner_joiner 9 March 2016 в 08:13
  • 2
    Пожалуйста, добавьте некоторое объяснение. Ваш ответ в настоящее время помечен как «низкое качество». и в конечном итоге может быть удалена. – Johannes Jander 9 March 2016 в 10:25
  • 3
    Существует разница между низкокачественным ответом, который должен быть проголосован, и отсутствием ответа, который следует удалить. См. . Вы делаете это неправильно: просьба о здравом рассуждении в очереди сообщений низкого качества . – twernt 10 March 2016 в 15:55
  • 4
    Как показать предварительный просмотр, вместо того, чтобы показывать обычный текст (он работает). но мне нужно показать предварительный просмотр, например, при переполнении стека при отправке вопроса или ответа, включая изображения – codelearner 7 June 2016 в 08:13

из https://docs.angularjs.org/api/ng/function/angular.element

angular.element

обертывает необработанный элемент DOM или HTML-строку как элемент jQuery (если jQuery недоступен, делегаты углового.элемента для встроенного подмножества Angular в jQuery, называемые jQuery lite или jqLite.)

Таким образом, вы просто можете сделать:

angular.module('myApp.filters', []).
  filter('htmlToPlaintext', function() {
    return function(text) {
      return angular.element(text).text();
    }
  }
);

Использование:

<div>{{myText | htmlToPlaintext}}</div>
20
ответ дан Dan Beaulieu 19 August 2018 в 14:52
поделиться
  • 1
    Я бы тоже избегал этого подхода; может не занять столько времени, сколько полный jQuery, но, безусловно, намного медленнее, чем принятый ответ. – jake 1 July 2014 в 20:22
  • 2
    Я предлагаю обернуть текст в элементе, иначе простую старую строку типа «hi». вернет пустую строку angular.element('<div>'+text+'</div>').text(); – Chris Jacob 2 July 2014 в 07:18
  • 3
    если вы находитесь в функции ссылки директивы, вы можете просто сделать element.text () 0.o – Jordan 2 December 2014 в 19:38
  • 4
    Я предпочитаю это решение использовать регулярное выражение, по крайней мере, в тех случаях, когда скорость не критична. Это более корректно и фактически конвертирует html в обычный текст, постороннее меньше знаков, специальных объектов и всех. – GuyGizmo 15 September 2015 в 15:58
  • 5
    Как показать предварительный просмотр, вместо того, чтобы показывать обычный текст (он работает). но мне нужно показать предварительный просмотр, например, при переполнении стека при отправке вопроса или ответа, включая изображения – codelearner 7 June 2016 в 08:13

Вы можете использовать ng-bind-html, не забудьте ввести $ sanitize service в свой модуль. Надеюсь, что это поможет

0
ответ дан Hung Vu 19 August 2018 в 14:52
поделиться

Вы хотите использовать встроенную HTML-полоску браузера для этого, вместо того, чтобы применять себе регулярное выражение.

angular.module('myApp.filters', []).
  filter('htmlToPlaintext', function() {
    return function(text) {
      return stripHtml(text);
    };
  }
);

var stripHtml = (function () {
  var tmpEl = $document[0].createElement("DIV");
  function strip(html) {
    if (!html) {
      return "";
    }
    tmpEl.innerHTML = html;
    return tmpEl.textContent || tmpEl.innerText || "";
  }
  return strip;
}());

Причина его обертывания в функции самоисполнения - это повторное использование создания элемента.

3
ответ дан Olivier C 19 August 2018 в 14:52
поделиться
  • 1
    Как показать предварительный просмотр, вместо того, чтобы показывать обычный текст (он работает). но мне нужно показать предварительный просмотр, например, при переполнении стека при отправке вопроса или ответа, включая изображения – codelearner 7 June 2016 в 08:14
  • 2
    изменил $ document [0] на документ, и это сработало для меня! спасибо – Allen Hamilton 5 October 2016 в 23:26
  • 3

Используйте эту функцию, например

 String.prototype.text=function(){
   return this ? String(this).replace(/<[^>]+>/gm, '') : '';
 }

  "<span>My text</span>".text()
  output:
  My text

Fiddle

-7
ответ дан pixelbyaj 19 August 2018 в 14:52
поделиться
  • 1
    Почему люди дали отрицательные 2? – pixelbyaj 25 June 2013 в 09:52
  • 2
    @Utopik почему? Также вы можете написать это как ответ? – Harry 26 June 2013 в 06:56
  • 3
    Это решение на основе jQuery. Вопрос был о угловых. – RevNoah 2 June 2014 в 22:21
  • 4
    Ваше решение несовместимо с требованиями OP. он уже создал свое приложение на угловых. jquery - это другая структура. – Ibrahim Lawal 21 June 2015 в 10:19
  • 5
    +1, и я не вижу здесь никакого jQuery ... wtf? Другая проблема - метод @ Abjo расширяет сборку в прототипе String. Некоторые разработчики предпочитают злиться. – Marecky 23 August 2017 в 10:50

<div ng-bind-html="myText"></div> Не нужно помещать теги интерполяции html {{}}, например, {{myText}}.

и не забывайте использовать ngSanitize в модуле, например, var app = angular.module("myApp", ['ngSanitize']);

и добавить свою зависимость cdn в странице index.html https://cdnjs.com/libraries/angular-sanitize

3
ответ дан Prasanna Sasne 19 August 2018 в 14:52
поделиться
  • 1
    работая как шарм, благодаря простому и коротким ответам. – Gaurav_0093 31 August 2017 в 12:01

Использовать ng-bind-html это только правильный и самый простой способ

-2
ответ дан Sandip Jana 19 August 2018 в 14:52
поделиться
Другие вопросы по тегам:

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