在Laravel中打印JSON而不将其转换为HTML实体
在Laravel中打印JSON而不将其转换为HTML实体
你好,我刚接触模板和Laravel。\n我已经通过以下方式将Laravel定界符更改为[[]]和[[[]]]:\n
Blade::setContentTags("[[", "]]"); Blade::setEscapedContentTags("[[[", "]]]");
\n现在我想将json传递给JavaScript变量,例如:\n
var somevariable = [[json_encode($variableFromController)]];
\n但是这会将json字符串转换为html实体,例如:\n{"index":200}\n
\n我搜索到{{!!json_encode($variableFromController)!!}}
应该可以解决,但是在我的系统中执行[[!!json_encode($variableFromController)!!]]
没有任何影响。\n我知道我可以这样做:,但这是我想尝试的最后一件事。有没有什么Laravel特定的方法可以解决这个问题?
问题的原因是在laravel中使用[[ json_encode($variableFromController) ]]
输出json字符串时,字符串中的特殊字符被转义为html实体,导致打印出来的字符串不是原始的json格式。解决方法是使用JSON.stringify
方法将json对象转换为字符串,并使用合适的html标签展示。
具体地,Blade::setContentTags("[[", "]]");
将{!!
替换为[[
,Blade::setEscapedContentTags("[[[", "]]]");
将{{
替换为[[[
。所以对于[[ json_encode($variableFromController) ]]
来说,等价于{!! json_encode($variableFromController) !!}
。
当使用[[ json_encode($variableFromController) ]]
打印字符串时,会输出{"index":200}
而不是{"index":200}
,这是因为laravel将特殊字符转义为html实体造成的。解决方法是使用JSON.stringify
方法将json对象转换为字符串,然后使用适当的html标签展示。
作者认为这个问题与laravel无关,而是由html造成的。在作者的测试中,使用了<pre> //JSON content </pre>
标签来展示json内容。如果想使用其他方法,可以参考这个或者这个。