如何避免用英文句号拆分文本生成有序列表时出现空li项
问题解决方案
问题根源是字符串末尾的英文句号在替换后会生成多余的空<li>标签,你可以选以下任意一种方案调整:
方案1:快速适配原有写法,仅清理末尾多余句号
先使用rtrim()函数删除字符串末尾的所有英文句号,再执行替换操作,修改后的代码如下:
<ol><li> {!! str_replace(".","</li><li>", rtrim($sscat->inclusion, '.')) !!} </li></ol>
该方案改动最小,rtrim()只会清除字符串末尾连续的英文句号,不会影响文本中间的正常内容。
方案2:更高兼容性,适配连续句号等异常场景
如果文本可能存在连续多个英文句号的情况(如aaa..bbb.ccc.),可以先拆分字符串过滤空值后再拼接,避免所有空列表项:
- 先在逻辑层处理文本内容:
// 按英文句号拆分字符串,过滤空元素后再拼接为li结构 $parts = array_filter(explode('.', $sscat->inclusion)); $listContent = implode('</li><li>', $parts);
- 前端视图输出:
<ol><li>{!! $listContent !!}</li></ol>
array_filter()会自动移除所有空字符串元素,不管是末尾句号还是中间连续句号产生的空内容都会被清理,稳定性更高。
注意:直接使用
{!! !!}输出未转义的内容存在XSS安全风险,如果存储的文本来自用户提交,建议提前做HTML特殊字符转义处理。
内容的提问来源于stack exchange,提问作者Wakil Ahmed
相关产品推荐
相关产品推荐

