前后端页面分离如何 JSON 传输富文本?

2019-07-09 14:14:44 +08:00
 sugarkeek

基于 Flask 和 Vue 的前后端分离页面,后端使用富文本编辑器后保存的包含富文本的数据如何通过 JSON 接口传输。

目前想到的方案:

  1. JSON 转义,前端在转义回去解析。=>感觉比较麻烦;
  2. 富文本编辑器换成 Markdown 语法。=>对于没接触 Markdown 的人来说不友好,而且 Markdown 语法中也涉及到特殊字符,也需要转义,还不如直接用富文本转义。

一个疑问:

  1. 学长之前和我讲 JS 对象保持习惯用单引号 '', Html 标记语言习惯用双引号 "", 这样就不会引起歧义了。可是 JSON 文件中不都是双引号 "":""; 的形式吗?
5009 次点击
所在节点    Python
16 条回复
jinksw
2019-07-09 14:43:32 +08:00
不是很懂
你自己手动拼接的 json 吗? 那样才涉及你自己去转义吧?
Mutoo
2019-07-09 14:46:52 +08:00
A1:JSON 是一种跨语言的协议,所以规范里规定 key 以及 string 都用双引号包围。以更好的兼容不同语言的解释器。

至于你的问题,应该是如何正确将 HTML 文档存到字符串中。可以参考这篇文章:
https://www.thorntech.com/2012/07/4-things-you-must-do-when-putting-html-in-json/

前端 vue 可以用 v-html 直接引用这个字符串即可。但还需要考虑安全问题,防止 XSS。
https://github.com/vuejs/vue/issues/6333
zjyl1994
2019-07-09 14:50:18 +08:00
嗯?你的 json 是手拼的?我们 json 都会自动处理转义啊?
icy37785
2019-07-09 14:54:38 +08:00
json 的转义不都是自的么。你手拼的话容易出错呀,还是让他自动转吧。
mnssbe
2019-07-09 15:02:14 +08:00
这时候可以用到“加密算法” base64 来解决你的烦恼
sugarkeek
2019-07-09 15:17:13 +08:00
@zjyl1994 #3 还有这种操作吗?我试试。
est
2019-07-09 15:17:57 +08:00
富文本有多富?

一般空格换行直接 <pre> 梭哈就行了。
sugarkeek
2019-07-09 15:19:36 +08:00
@icy37785 #4 不知道原来能自动转义,我一直以为 json 里传特殊符号会可能会引起歧义,一直都是没敢加。我试试吧。
sugarkeek
2019-07-09 15:21:03 +08:00
@Mutoo #2 感谢您的理解,确实是这个意思。我试试。
IsaacYoung
2019-07-09 15:21:45 +08:00
{
html: "<div></div>"
}
sugarkeek
2019-07-09 15:23:50 +08:00
@est #7 哈哈,没想到那么多,目前能想到的就是富文本里双引号、空格、换行
sugarkeek
2019-07-09 15:25:48 +08:00
@mnssbe #5 高级的玩法,复盘的时候试试。
zjyl1994
2019-07-09 15:43:55 +08:00
@chenkeyan1 正常的 json 处理库都会自动转义的,不需要你自己操心
Asice
2019-07-09 17:26:16 +08:00
感觉要发明个三引号,引号不够用
doublleft
2019-07-09 17:30:55 +08:00
js 处理可以 split 一下 \r \n 这种的,起码换行就搞定了
est
2019-07-09 18:19:33 +08:00
@chenkeyan1 那就<pre> 就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX