【发布时间】:2014-12-20 04:06:10
【问题描述】:
我在渲染 HTML 时遇到了一个小问题,它存储在 CouchBase 中,由 Node.js 获取
在 CouchBase 我有几个小的 HTML-sn-ps。它们包含文本、<br /> 等标签和&lt; 等html 实体。它们当然存储为 JSON 中的转义字符串。
到目前为止,一切都很好。但是,当我将其拉出并显示在页面上时,它会“按原样”呈现,而不会被解释为 HTML。
例如:
[ some content ...]
<p>Lorem is > ipsum<br />And another line</p>
[rest of content ...]
来自 Express 4 中的控制器:
var express = require('express');
var router = express.Router();
var couchbase = require('couchbase');
var cluster = new couchbase.Cluster('couchbase://myserver');
var bucket = cluster.openBucket('someBucket', 'somePassword');
var Entities = require('html-entities').XmlEntities;
entities = new Entities();
var utf8 = require('utf8');
/* GET home page. */
router.get('/', function(req, res) {
bucket.get('my:thingie:44', function(err, result) {
if(err) throw err
console.log(result);
var html = utf8.decode(entities.decode(result.value.thingie.html));
// var html = utf8.encode(result.value.thingie.html);
// var html = utf8.decode(result.value.thingie.html);
res.render('index', { title: 'PageTitle', content: html });
});
});
然后将其传递给模板(使用 hogan.js)进行渲染。
当我研究这个时,我发现它可能与&lt;'s 和&lt;'s 的编码有关,这会阻止它被解析。您可以在代码中看到我的转换尝试,其中没有任何选项给出所需的结果,即将内容呈现为 HTML。
使用 utf8.decode() 时,没有区别。
使用 utf8.encode(),没有区别。
使用entities.decode() 它将&lt; 转换为&lt;,正如预测的那样,但即使&lt;div;&gt 变为<div>,它也不会呈现。
有什么想法吗?
【问题讨论】:
标签: node.js express character-encoding couchbase html-entities