在Laravel中打印JSON而不将其转换为HTML实体

10 浏览
0 Comments

在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特定的方法可以解决这个问题?

0
0 Comments

问题的原因是在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内容。如果想使用其他方法,可以参考这个或者这个

0