Phoenix Liveview中如何在script标签内插入原生JSON-LD内容
在Phoenix LiveView模板中正确插入JSON-LD的方案
问题根因
Phoenix的LEEx/HEEx模板默认启用HTML自动转义机制,会对所有动态输出的特殊字符(双引号、尖括号等)做转义处理。你通过Poison.encode!生成的本是合法JSON字符串,但经过模板转义后双引号会被替换为",最终输出为被转义的字符串格式,无法被识别为有效的JSON结构。
解决方法
使用Phoenix内置的raw/1函数,将编码后的JSON内容标记为安全HTML,跳过自动转义步骤即可正常输出原生JSON结构。
修改后的root.html.leex对应代码:
<!DOCTYPE html> <html lang="pt-BR"> <head> ... <%= if @data_structure do %> <script type='application/ld+json'> <%= raw Poison.encode!(@data_structure) %> </script> <% end %> ... </head> <body> <%= @inner_content %> </body> <html>
补充说明
- 若你的项目使用Phoenix默认推荐的
Jason库做JSON编码,替换写法为<%= raw Jason.encode!(@data_structure) %>即可,逻辑完全一致。 - 由于
raw/1会跳过转义校验,请确保@data_structure中的内容均为可控内容,不要直接插入未过滤的用户提交内容,避免安全风险。
内容的提问来源于stack exchange,提问作者Allan Duarte
相关产品推荐
相关产品推荐

