3

「sanitize-html」に実際にhtmlタグを削除するように指示するにはどうすればよいですか(コンテンツのみを保持します)?現在、たとえば div セクションを保持するように設定した場合、出力にも次のように書き込まれます<div>some content</div>- I want only the inside...('some content')

短くするために-タグ、属性などは必要ありません-それらの要素のコンテンツのみ..

var Crawler = require("js-crawler");
    var download = require("url-download");
    var sanitizeHtml = require('sanitize-html');
    var util = require('util');
    var fs = require('fs');

    new Crawler().configure({depth: 1})
      .crawl("http://www.cnn.com", function onSuccess(page) {

        var clean = sanitizeHtml(page.body,{
         allowedTags: [ 'p', 'em', 'strong','div' ],
        });
        console.log(clean);
        fs.writeFile('sanitized.txt', clean, function (err) {
            if (err) throw err;
            console.log('It\'s saved! in same location.');
        });

        console.log(util.inspect(clean, {showHidden: false, depth: null}));
        var str = JSON.stringify(clean.toString());
        console.log(str);
        /*download(page.url, './download')
        .on('close', function () {
          console.log('One file has been downloaded.');
        });*/
      });
4

1 に答える 1

16

私はsanitize-htmlの作者です。

allowedTags を空の配列に設定できます。sanitize-html は、許可されていないタグのコンテンツを破棄せず、タグ自体のみを破棄します (「スクリプト」や「スタイル」など、これが意味をなさないいくつかのタグを除いて)。そうしないと、ワード プロセッサなどからリッチ テキスト エディタにコピー アンド ペーストされたマークアップをクリーンアップするという本来の目的にはあまり役に立ちません。

ただし、次のようなマークアップがある場合:

<div>One</div><div>Two</div>

それは次のようになります。

ワンツー

これを回避するには、textFilter オプションを使用して、タグのテキストの後に少なくとも 1 つのスペースが常に続くようにします。

textFilter: function(text) {
  return text + ' ';
}

ただし、これにより、「strong」や「em」などのインライン タグを含む文にも余分なスペースが導入されます。

考えれば考えるほど、あなたにとっての最良の答えは、おそらく完全に異なる npm モジュールです。

https://www.npmjs.com/package/html-to-text

これは広く使用されており、ユースケースよりもはるかに適しています。sanitize-html は、タグが必要な状況を対象としています...間違ったタグではありません。

于 2015-07-26T16:35:51.563 に答える