【问题标题】:Node.js Equivalent for htmlspecialchars in phpNode.js 等效于 php 中的 htmlspecialchars
【发布时间】:2019-03-28 17:11:34
【问题描述】:

我实际上是从我的 mysql 数据库中获取数据,其中包含带有重音符号的文本,例如

" é è à ê..."

但是当我使用 node.js 将它渲染到我的 ejs 文件时,它会显示给我

“hélo”代表“hélo”

。 问题是使用 php 和函数 htmlspecialchars(str); 的 easyli 求解器 这个功能在 Node 中有没有等价物?

谢谢

【问题讨论】:

  • PHP 的htmlspecialchars 对此无济于事。你需要htmlentities。 (如果问题出在 PHP 和浏览器之间,它只会解决问题,如果问题出在 PHP 和 MySQL 之间,或者如果数据首先以损坏的状态放入数据库,则无济于事)。
  • 你真的应该通过规范化你的字符编码(并在任何地方使用 UTF-8)来解决这个问题。
  • 试试这个:Buffer.from(str).toString('utf8')。但我认为您的服务器端 Web 应用程序不返回 utf-8 编码标头,express 框架在调用 res.render() 之前尝试调用:res.charset = 'utf-8'; 否则我怀疑使用utf-8 编码存储在具有@ 的表列中的数据987654329@编码

标签: php mysql node.js ejs


【解决方案1】:

首先,如果您正确设置了编码(在 html 页面和数据库中或在插入之前/选择之后进行转换),您不需要将特殊字符转换为 HTML 实体以避免所描述的行为。 htmlspecialchars() 应该用于阻止人们发布 HTML(将 <> 转换为 <>)。

如果你还需要转义 HTML 特殊字符,看看这个 NPM 包:https://www.npmjs.com/package/html-entities

像这样使用它:

const Entities = require('html-entities').AllHtmlEntities;
const entities = new Entities();

console.log(entities.encode("éèàâê");

会输出

éèàâê

【讨论】:

  • 编码实际上很好(我的html上的UTF8)和(数据库中的utf8bin_unicode_ci)我尝试使用您发送给我的库,但它不起作用,知道吗?
  • 如果您在数据库和 HTML 页面中没有看到相同的字符,那么在数据库和 HTML 页面之间的某个地方,它正在以不同的方式重新编码。如果您提供有关代码的更多信息,您可能会在那里获得一些帮助。至于htmlspecialchars,@Quentin 是对的,你需要的是一个htmlentities() 函数。检查编辑的答案
  • 你的意思是我可以这样做:myTitle[i] = entity.encode(results[i].title) 然后做 res.render('mypage' , { Titile : myTitle});它会正确显示吗?
  • ps:我用 utf8_unicode_ci 重新编码了我的所有数据库,虽然速度很慢,但读重音(mysql 文档)
  • 我正要建议!
猜你喜欢
  • 2010-10-30
  • 2022-01-14
  • 1970-01-01
  • 2012-02-05
  • 2015-02-19
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多