Laravel9 Blade使用Str::of截取Summernote数据返回空值问题
问题原因
- 字段写入异常:对应模型未将
product_description加入$fillable白名单、表单验证规则拦截、XSS防护过滤了提交的富文本内容,导致数据库中该字段实际存储值为NULL或空字符串,调取自然无内容。 - 截断逻辑不匹配富文本场景:你使用的
Str::of($item->product_description)->limit(40)是针对纯文本设计的截断方法,Summernote存储的内容包含大量HTML标签,前40个字符很可能全是标签代码(比如<p class="content" style="font-size:14px">这类),标签本身不会在页面渲染显示,最终输出的可见内容为空;如果截断位置刚好落在HTML标签内部,还会造成标签未闭合,浏览器解析失败直接不显示后续内容。 - 多字节字符截断异常:
Str::limit默认按单字节计数,若描述内容以中文等多字节字符开头,截断时可能出现字符截断乱码,导致内容无法正常显示。
解决方案
- 第一步:先确认数据库实际存储值
调试阶段先输出字段原始值,确认内容是否真的写入数据库:
如果输出为NULL,先修改对应模型,将字段加入白名单:// 临时调试代码,验证完成后删除 dd($item->getRawOriginal('product_description'));
同时检查表单验证规则、XSS过滤配置,确保富文本内容可以正常提交入库。// 对应商品模型文件 protected $fillable = [ // 其余已配置字段... 'product_description', ]; - 第二步:替换富文本场景的截断逻辑
不要直接对带HTML标签的富文本用原生字符串截断,先处理标签再做安全截断。如果不需要保留富文本格式,直接剥离标签后截断即可,替换Blade代码为:
如果需要保留基础文本格式,先自定义HTML安全截断方法,避免截断后标签未闭合:{!! Str::limit(strip_tags($item->product_description), 40, '...') !!}- 新建
app/helpers.php文件,写入以下函数:
<?php if (!function_exists('rich_text_limit')) { function rich_text_limit($content, $length = 40, $suffix = '...') { // 配置允许保留的基础标签 $allowTags = '<p><br><strong><b><em><i><u><span>'; $content = trim(strip_tags($content, $allowTags)); if (mb_strlen(trim(strip_tags($content))) <= $length) { return $content; } // 按多字节规则截断纯文本部分,避免乱码 $plainText = trim(strip_tags($content)); $truncatedText = mb_substr($plainText, 0, $length) . $suffix; return $truncatedText; } }- 在
composer.json的autoload配置中加载该辅助文件:
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/helpers.php" ] }- 执行
composer dump-autoload生效后,Blade中调用自定义方法即可:
{!! rich_text_limit($item->product_description, 40) !!} - 新建
- 第三步:校验Summernote提交逻辑
确认Summernote初始化时配置了内容同步,避免提交时空值传到后端:
表单提交前可通过控制台打印字段值,确认内容正常获取。$('#product-description').summernote({ height: 300, // 其余配置... callbacks: { onBlur: function() { // 失焦时将编辑器内容同步到关联的textarea $(this).val($(this).summernote('code')); } } });
内容的提问来源于stack exchange,提问作者Akshay Waghamare
相关产品推荐
相关产品推荐

