我想使用数组作为data-*属性,很多StackOverflow答案建议我应该使用JSON.stringify();
所以,如果我有这样的数组:['something', 'some\'thing', 'some"thing']它会被解析到"["something","some'thing","some\"thing"]",因此它不适合既没有data-*='',也不data-*=""是因为无论是'或"将打破HTML标签。
我是否缺少某些东西,或者encodeURIComponent()是对这样的数组进行编码的真正解决方案?为什么在其他StackOverflow答案中没有人注意到这一点?
该推理JSON.stringify是不保证是安全的HTML属性时,该文本是HTML标记本身是有效的组成部分。但是,如果使用一种访问方法(例如.data或.attr)来分配值,则不会产生转义问题,因为这些方法不会直接处理原始HTML文本。
尽管它encodeURIComponent 可以 “工作”,因为它避开了所有有问题的字符,但同时导致值/标记过于丑陋,并且decodeURIComponent在使用值时需要手动操作-!
相反,如果直接将数据插入HTML,只需对值进行“ HTML编码”,然后将结果用作属性值。大多数服务器端语言都附带有此功能,尽管JavaScript本身没有提供等效功能。
假设引用了属性值,则需要用适当的HTML实体替换的有问题的字符是:
&- &,先逃避,先申请"- ",用于双引号属性'- ',用于单引号属性<和>使用上述方法依赖于解析的 HTML标记,并且在其中HTML实体的自动解码,使得实际(非编码的)结果被存为在DOM中的数据属性值。