data- *属性中的encodeURIComponent()与JSON.stringify()

Jim*_*sea 4 javascript json

我想使用数组作为data-*属性,很多StackOverflow答案建议我应该使用JSON.stringify()

所以,如果我有这样的数组:['something', 'some\'thing', 'some"thing']它会被解析到"["something","some'thing","some\"thing"]",因此它不适合既没有data-*='',也不data-*=""是因为无论是'"将打破HTML标签。

我是否缺少某些东西,或者encodeURIComponent()是对这样的数组进行编码的真正解决方案?为什么在其他StackOverflow答案中没有人注意到这一点?

use*_*740 5

该推理JSON.stringify保证是安全的HTML属性时,该文本是HTML标记本身是有效的组成部分。但是,如果使用一种访问方法(例如.data.attr)来分配值,则不会产生转义问题,因为这些方法不会直接处理原始HTML文本。

尽管它encodeURIComponent 可以 “工作”,因为它避开了所有有问题的字符,但同时导致值/标记过于丑陋,并且decodeURIComponent在使用值时需要手动操作-!

相反,如果直接将数据插入HTML,只需对值进行“ HTML编码”,然后将结果用作属性值。大多数服务器端语言都附带有此功能,尽管JavaScript本身没有提供等效功能。

假设引用了属性值,则需要用适当的HTML实体替换的有问题的字符是:

  • &- &,先逃避,先申请
  • "- ",用于双引号属性
  • '- ',用于单引号属性
  • 可选(XML必需):<>

使用上述方法依赖于解析 HTML标记,并且在其中HTML实体的自动解码,使得实际(非编码的)结果被存为在DOM中的数据属性值。