Laravel函数(htmlentities)没有完全工作,脚本仍然可以执行(只有一次)


Laravel e function (htmlentities) is not fully working, scripts can still be executed (only once)

我想在Laravel中使用e函数,它相当于PHP的htmlentities函数。

在我的表单视图和控制器中,我试图保存一个使用e函数的文档,它看起来像这样:

表单视图:

{{ Form::text('client_name') }}

控制器:

$client = new Client;
$client->client_name = e(Input::get('client_name'));
$client->save();

假设我将<script type="text/javascript">alert('gotcha!');</script>写入client_name字段。然后我把它保存到数据库,但当它保存到数据库后重定向,它运行这个脚本一次!也只是为了确保e函数工作正常,我查看了我的数据库,它是预期的:

"&lt;script type=&quot;text/javascript&quot;&gt;alert(&#039;gotcha!&#039;);&lt;/script&gt;"

我的问题是如何避免执行javascript alert('gotcha') ??

或者我把这个函数或htmlentities函数在错误的地方?'

谢谢!

您在错误的地方运行e()。转义最好用于数据的输出,而不是用于输入。

你的控制器应该这样做:

$client = new Client;
$client->client_name = Input::get('client_name');
$client->save();

您的表单视图可以使用以下内容-因为表单会自动"转义"数据

{{ Form::text('client_name') }}

但是在你创建了客户端并重定向之后——我打赌你在某个地方做了这个

{{ $client->client_name }}

你应该改成这个

{{{ $client->client_name }}}

注意第三个{}-它将自动为您转义数据