开发者社区 问答 正文

在Laravel模板中打印json

我在将Eloquent数据作为JSON移至Laravel模板时遇到麻烦。有问题的数据是用户输入的文本,其中包含换行符,各种特殊字符,引号,连字符,MS Word xml垃圾标记,请为其命名。

当我将其打印到模板时

<script>App.data = JSON.parse('{{data}}')</script>

展开
收起
游客ufivfoddcd53c 2020-01-06 12:03:22 771 分享 版权
阿里云 AI 助理回答

在Laravel中,将Eloquent模型数据(特别是包含特殊字符的文本)作为JSON传递到视图模板时,确保正确地转义和清理数据是非常重要的。以下是一些步骤和建议来帮助你处理这个问题:

  1. 使用 json_encode 函数:在将数据传递给视图之前,使用PHP的json_encode函数可以自动处理大部分特殊字符的转义问题。例如:
$data = YourModel::where('some_condition', true)->get();
$jsonData = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
return view('your-view', compact('jsonData'));

这里,JSON_UNESCAPED_UNICODE 保证了中文等非ASCII字符不会被转义,而 JSON_UNESCAPED_SLASHES 确保了斜杠不被转义,这在HTML中直接使用JSON字符串时可能需要。

  1. 清理用户输入:在保存用户输入到数据库之前,应该进行清理和验证。Laravel提供了表单请求(Form Requests)和验证规则来帮助你完成这项工作。例如,去除MS Word的XML标签,你可以使用如 strip_tags 函数:
$userInput = strip_tags(request('user_input')); // 去除HTML和XML标签
  1. 处理换行符:如果你希望在输出时保留换行符,可以在JavaScript端将其转换为HTML的 <br> 标签。在Laravel视图中,可以直接使用 nl2br(e($jsonString)) 来实现,但因为你是以JSON形式传递,所以更合理的做法是在前端处理:
let formattedText = JSON.parse('@json($jsonData)').text.replace(/\n/g, '<br>');
  1. XSS防护:Laravel的Blade模板引擎通过 {{ }}{!! !!} 输出变量时会自动处理XSS攻击。对于JSON数据,使用 @json($variable) 是安全的,它会自动调用 htmlentities 防止XSS攻击。但是,如果在JavaScript中处理这些数据,请确保理解数据的安全性并采取相应措施。

  2. 前端展示:在前端,确保正确解析JSON数据,并根据需要格式化文本内容,比如处理换行符、特殊字符显示等。

综上所述,关键是先在后端做好数据的清洗和编码,在前端再做适当的格式化处理,这样就可以有效地解决你在将Eloquent数据作为JSON移至Laravel模板时遇到的问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答