PHP项目中textarea输入内容前端重复显示问题求助(CKEditor引入后引发异常)
问题排查与解决方案
从你的描述和代码片段来看,问题的根源不在数据存储环节(你也确认数据库内容正常),而是在前端的内容显示逻辑上,同时CKEditor的特性放大了这个问题。
1. 核心问题:内容重复显示的原因
看你notifications.php中显示name字段的这段代码:
<td class="pt-2"><?= $longString=$row['name']; $link = $row['id']; $longStringshortcut = strlen($longString); //echo substr($longString, 0, 100).'... <a href="$link">Read More</a>'; if ($longStringshortcut > 250) { echo substr($longString, 0, 250).".. <a href='details.php?details=$link'><strong>Preberi več...</strong></a>"; } else { echo $longString; } ?>
这里的<?= $longString=$row['name']; ?>会直接输出$row['name']的值(因为<?=是echo的简写),而当内容长度≤250时,else分支又会echo $longString一次——相当于同一个内容被输出了两遍!
- 当你用自定义编辑器时,内容没有额外标签,所以看起来就是纯文本重复;
- 当你引入CKEditor后,编辑器会自动给内容添加
<br><br>这类格式标签,加上两次输出,就出现了test <br><br> test的现象; - 数据库里的内容是正常的,因为
action.php的插入逻辑只存了一次。
2. 修复步骤
只需要修改notifications.php中的显示逻辑,把赋值和输出分开:
<td class="pt-2"> <?php $longString = $row['name']; $link = $row['id']; $longStringshortcut = strlen($longString); if ($longStringshortcut > 250) { echo substr($longString, 0, 250).".. <a href='details.php?details=$link'><strong>Preberi več...</strong></a>"; } else { echo $longString; } ?> <a href="details.php?details=<?= $row['id']; ?>" class="badge badge-primary">Details</a> <a href="action.php?delete=<?= $row['id']; ?>" class="badge badge-danger" onclick="return confirm('Do you want delete this record?');">Delete</a> <a href="index.php?edit=<?= $row['id']; ?>" class="badge badge-success">Edit</a> </td>
关键改动是把<?= $longString=$row['name']; ?>换成<?php $longString = $row['name']; ?>,避免在赋值时就输出内容。
3. 关于CKEditor的额外说明
如果之后还要使用CKEditor,建议开启编辑器的内容过滤功能,避免自动添加不必要的<br>标签。你可以在CKEditor的配置中添加:
CKEDITOR.config.enterMode = CKEDITOR.ENTER_P; // 用<p>标签代替自动添加的<br> CKEDITOR.config.shiftEnterMode = CKEDITOR.ENTER_BR; // 仅在Shift+Enter时插入<br>
这样可以更精准控制内容的格式,减少意外的标签插入。
内容的提问来源于stack exchange,提问作者user14584183
相关产品推荐
相关产品推荐

