You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.7中如何避免HTML特殊字符编码?数据库内容需原样返回Angular

解决Laravel 5.7返回HTML内容时自动编码的问题

我明白你遇到的困扰:把HTML代码存在SQLite数据库后,返回给Angular时Laravel自动转义了特殊字符,尝试html_entity_decode也没效果。这其实是因为Laravel默认生成JSON响应时,会自动转义<、>、&这类HTML特殊字符,而非你的内容本身被编码了。试试下面这几个方案:

方案1:自定义JSON响应的转义选项

直接使用response()->json()方法,并传入禁用HTML字符转义的选项。Laravel默认会把HTML字符转义成Unicode编码(比如\u003C),我们可以通过指定JSON选项来避免这一点:

$post = Post::find($id);
return response()->json(
    ['content' => $post->content],
    200,
    [],
    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
);

这样HTML内容就能原封不动地返回,不会被转义处理。

方案2:定义响应宏(复用场景)

如果你的项目里有很多地方需要返回未转义的HTML内容,可以在AppServiceProvider的boot方法里定义一个响应宏,方便重复调用:

use Illuminate\Support\Facades\Response;

public function boot()
{
    Response::macro('rawJson', function ($data) {
        return response()->json($data, 200, [], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    });
}

之后在控制器里就能直接用:

$post = Post::find($id);
return response()->rawJson(['content' => $post->content]);

方案3:检查模型的访问器/修改器

偶尔会遇到模型里的字段访问器自动转义内容的情况,检查你的Post模型里有没有类似这样的代码:

public function getContentAttribute($value)
{
    return htmlspecialchars($value);
}

如果有的话,删除或修改这个访问器,让它返回原始的内容即可。

为什么html_entity_decode没用?

你的问题核心不是内容被实体编码(比如&lt;这种形式),而是Laravel在生成JSON响应时把HTML字符转义成了Unicode编码,所以html_entity_decode自然起不到作用,我们需要从响应生成的层面解决转义问题。


内容的提问来源于stack exchange,提问作者Ali Reza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:56