【问题标题】:Laravel blade escape jqueryLaravel刀片逃生jquery
【发布时间】:2015-02-22 12:09:22
【问题描述】:

在我的 laravel 4 项目中,用户可以提交 textarea 数据。我知道我可以在我的视图中使用 {{{ }}} 转义用户数据, 但是,如果我使用 ajax 获取数据,我该怎么办?这是一个 jquery 变量,我无法用括号对其进行转义。例如,如果我处理来自 ajax 的响应,例如:

$.each(response, function( key, value ) 
{
    $('#div').append('<div>'+value.notEscapedData+'<div>')
});

例如数据来自的控制器是什么。

$response = Data::all()
return $response;

【问题讨论】:

  • 你想要 HTML Escape。检查this thread 以获得很好的答案。

标签: ajax laravel blade


【解决方案1】:

您可以使用 javascript 来完成(您会在互联网上找到很多解决方案。例如,在 cmets 中发布的链接 @Thrustmaster)或者您可以在 Laravel 中完成。

当您使用 Blades 三重花括号 {{{ }}} 时,它编译为对 e() 的调用(然后调用 htmlentities

所以你可以使用e('string-containing-html') 来转义字符串。

您可以使用model attribute accessor 进行转义,但我想您有时需要未转义的字符串,所以这里有另外两个选项:

toArray()

覆盖模型中的toArray() 方法

public function toArray(){
    $array = parent::toArray();
    $array['attribute_name'] = e($array['attribute_name']);
    return $array;
}

这样每次模型转换成数组(用来转换成 JSON= 时,该属性都会被转义。

在你的控制器中循环它

$data = Data::all();
$data->each(function($d){
    $d->attribute_name = e($d->attribute_name);
});
return Response::json($data);

【讨论】:

  • 将其作为 json 响应返回比作为集合返回有什么优势,顺便说一句,感谢您的精彩解释。
  • 技术上没有区别,但很明显该操作将返回 json
  • 什么意思?如果 toArray() 在您返回集合而不是 Response::json() 时有效?
猜你喜欢
  • 2014-08-28
  • 2015-10-27
  • 2018-05-21
  • 2020-04-26
  • 2021-01-27
  • 2019-01-31
  • 2019-04-02
  • 2014-12-20
  • 2013-11-22
相关资源
最近更新 更多