php中htmlspecialchars的Node.js等效项
我实际上是从我的mysql数据库中获取数据,其中有带重音的文本,如 “èèèèèè…” 但是当我用node.js将它呈现到我的ejs文件时,它会显示给我 “h�“lo”代表“hélo” 。 问题是使用php和函数php中htmlspecialchars的Node.js等效项,php,mysql,node.js,ejs,Php,Mysql,Node.js,Ejs,我实际上是从我的mysql数据库中获取数据,其中有带重音的文本,如 “èèèèèè…” 但是当我用node.js将它呈现到我的ejs文件时,它会显示给我 “h�“lo”代表“hélo” 。 问题是使用php和函数htmlspecialchars(str)的easyli解算器 节点中的此函数是否有等效项 谢谢首先,如果您正确设置了编码(在html页面和数据库中,或在插入前/选择后转换),则不需要将特殊字符转换为html实体以避免所述行为htmlspecialchars()应用于防止人们发布HTML
htmlspecialchars(str)的easyli解算器代码>
节点中的此函数是否有等效项
谢谢首先,如果您正确设置了编码(在html页面和数据库中,或在插入前/选择后转换),则不需要将特殊字符转换为html实体以避免所述行为htmlspecialchars()
应用于防止人们发布HTML(将
转换为
和
)
如果仍然需要转义HTML特殊字符,请查看此NPM包:
像这样使用它:
const Entities = require('html-entities').AllHtmlEntities;
const entities = new Entities();
console.log(entities.encode("éèàâê");
将输出
éèàâê
PHP的
htmlspecialchars
在这方面没有帮助。您需要htmlentities
。(只有当问题发生在PHP和浏览器之间时,它才能解决问题;如果问题发生在PHP和MySQL之间,或者如果数据在一开始就以损坏的状态放入数据库,它就不会有任何帮助)。你真的应该通过规范字符编码(并在任何地方使用UTF-8)来解决这个问题。试试这个:Buffer.from(str).toString('utf8')
。但我认为您的服务器端web应用程序不会返回utf-8编码头,使用express
framework尝试调用:res.charset='utf-8'
在调用res.render()
之前,否则我怀疑在表列中使用utf-8
编码存储的数据具有latin1
编码该编码实际上很好(在我的html中为UTF8)和(数据库中为utf8bin_unicode_ci),我试图使用您发送给我的库,但它不起作用,你知道吗?如果你在数据库和HTML页面中看不到相同的字符,那么在数据库和HTML页面之间的某个地方,它被重新编码的方式就不同了。如果你提供更多关于代码的信息,你可能会得到一些帮助。至于htmlspecialchars
,@Quentin是对的,您需要的是htmllentities()
函数。检查编辑后的答案你的意思是我可以做:myTitle[i]=entities.encode(results[i].title),然后做res.render('mypage',{Titile:myTitle});它会正确地显示它吗?ps:我用utf8_unicode_ci重新编码了我所有的数据库,虽然速度很慢,但是读的是重音符号(mysql文档),我正要建议这样做!