0

node.js Web アプリケーションで Web サイトの説明を取得しようとしています。完全に機能しているように見えますが、node.js は NCR の文字に問題があるようです (http://en.wikipedia.org/wiki/Numeric_character_reference)。リンクグラバー用のコードを以下に示します

getInfo:(url) ->
  errorMessage = 'Invalid Link'

  request(url, (error, response, body)->
    if (!error && response.statusCode == 200)
      handler = new htmlparser.DefaultHandler((err, dom) ->
        if (err)
          res(error: errorMessage)
        else
          imgs = select(dom, 'img')
          titletags = select(dom,'title')
          descripTags = select(dom,'meta')
          filteredTags = _.filter(descripTags,(tag) -> tag.attribs.name? && tag.attribs.name == 'description')

          uri = response.request.uri.href

          mapFunc =(imgSrc) ->
            pattern = /^((http|https|ftp):\/\/)/
            img = imgSrc.attribs.src
            if (!pattern.test(img)) then uri.substring(0,uri.length-1) + img else img

          res(
            images: _.filter(_.map(imgs,mapFunc),(img)-> (img != '')) || []
            title: titletags[0].children[0].raw || ''
            description: if filteredTags.length != 0 then filteredTags[0].attribs.content || '' else ''
          )
      )
      parser = new htmlparser.Parser(handler)
      parser.parseComplete(body)
    else
      res(error: errorMessage)
  )

例として、情報を取得するフォーム (http://www.zdnet.com) に次の URL を入力すると、説明は になりますZDNet's breaking news, analysis, and research keeps business technology professionals in touch with the latest IT trends, issues and events.。アポストロフィが問題です ( として表されます')

私の質問は、どのライブラリも有効な HTML NCR を適切に解析して同等の文字列に変換しないのはなぜですか。これを修正する方法がない場合、NCR のすべての出現箇所をいくつかの他のライブラリ?

私が使用しているライブラリを以下に示します

request = require 'request'
htmlparser = require 'htmlparser'
select = require('soupselect').select
_ = require 'underscore'
4

1 に答える 1

0

https://github.com/minchenkov/node-html-encoderライブラリを使用して文字列をデコードし、正常に動作しました (node.js 標準ライブラリがデフォルトで文字列を html デコードしない理由がわからない)

于 2012-11-08T14:36:44.460 に答える