在Laravel刀片模板中用JavaScript的HTML存储PHP变量

Store PHP variable with HTML in JavaScript in Laravel Blade Template

本文关键字:JavaScript HTML 存储 变量 PHP Laravel      更新时间:2023-09-26

我需要一种在JavaScript中存储PHP变量中的HTML的方法。

var contents = "{{ $template }}";
但是,

会生成一个错误。我猜这是因为它没有正确转义,所以它搞砸了web浏览器,因为JS不能正确存储它…我试过Laravel escape

var contents = "{{ e($template) }}";

没有成功。

最终目标是:$('#preview-iframe').contents().find('html').html(contents);

我怎样才能做到这一点?

双花括号{{ }}将始终将特殊字符转换为HTML实体。尝试使用{!! !!}来渲染代码。但是,您需要确保对字符串中的双引号进行转义。

:

var contents = "{{ $template }}";

应该是这样的:

var contents = "{!! addcslashes($template, '"') !!}";

对于同样的问题,我使用了这个解决方法

var contents = atob("{{ base64_encode($contents) }}");

这非常方便,因为您不必转义任何字符,并且可以保证javascript不会出现任何语法错误。

一个缺点是IE10及以上版本支持atob()函数源

您可以将PHP变量值输入java脚本,如下所示

<script>
   var jsvariable = <? echo $phpvarialbe ?>;
   console.log(jsvariable)
</script>

您可以尝试var contents = {{$template->toJSON()}};

我遇到过非常类似的问题。问题是如果你使用

var contents = "{{ e($template) }}";

在你的javascript中,解析器认为{{e($template)}}是javascript对象,而不是你的blade变量。脚本块中的括号不被视为叶片变量,而是作为JSON格式的对象。

我的解决方案是,我做了一个模板,并将它包含在像这样的叶片变量的地方

var contents = '@include("public.default.values.content")';
然后我在文件夹(你的视图文件夹)/public/default/values/content.刀片.php中创建了一个文件,并在这个模板文件中只添加了一行,你的值
{{ e($template) }}

Include可以被javascript块内的blade解析器正确理解。这样,blade解析器将正确地使用javascript代码中的include,正确地转到content blade,获取值并将其保存在javascript变量中。