PHP中如何让wordwrap函数仅截断纯文本、不切割HTML代码
解决方案
有两种常用的处理方式,你可以根据自己的场景选择:
方案1:使用HTML感知的自定义折行函数(后端处理)
原生wordwrap不识别HTML标签,所以你需要自定义函数,遍历内容时跳过所有HTML标签内容,仅对文本部分计数折行,参考实现代码如下:
function html_wordwrap($str, $width = 60, $break = "<br/>", $cut = true) { $result = ''; $tagOpen = false; $charCount = 0; for ($i = 0; $i < strlen($str); $i++) { $char = $str[$i]; if ($char == '<') { $tagOpen = true; $result .= $char; continue; } if ($char == '>') { $tagOpen = false; $result .= $char; continue; } if (!$tagOpen) { $charCount++; if ($charCount >= $width && ($cut || ctype_space($char))) { $result .= $break; $charCount = 0; if (ctype_space($char)) continue; } } $result .= $char; } return $result; }
使用的时候直接替换原来的wordwrap调用即可:
html_wordwrap($getPagina[$i]["message"], 60, "<br/>", true)
方案2:用CSS处理折行(更推荐,无需修改后端逻辑)
如果只是为了避免表格内文本溢出,完全可以交给浏览器原生处理,不用后端硬编码插入<br/>,给对应表格单元格添加如下CSS样式即可:
td { word-break: break-all; overflow-wrap: break-word; /* 可按需添加max-width规则限制单元格最大宽度 */ }
这个方案不会破坏原有HTML结构,也避免了后端处理HTML的各种边界问题,适配性更强。
内容的提问来源于stack exchange,提问作者One Piece Power
相关产品推荐
相关产品推荐

