【问题标题】:PHP substr breaks my tablePHP substr 打破了我的桌子
【发布时间】:2026-02-07 09:20:05
【问题描述】:

我有一张这样的桌子

echo '<table>';
echo '<tr>';

                echo '<td>' . $value['title'] . '</td>';

                echo '<td>' . $value['date'] . '</td>';

                echo '<td>' . $value['preview'] . '</td>';

                echo '<td>' . substr($value['description'], 0, 10) . '</td>';

                echo '<td><img src="../images/articles/' . $value['image'] . '"></td>';

                echo '<td><img src="../images/articles/' . $value['detailImage'] . '"></td>';

                        if($value['showDetailImage'] == 1){
                                $showDetailImage = 'Yes';
                        }else{
                                $showDetailImage = 'No';
                        }

                echo '<td>' . $showDetailImage . '</td>';

                echo '<td><a class="btn btn-default" href="Press.php?action=edit&id=' . $value['id'] . '">Edit</a></td>';
                echo '<td><a onclick="if(!confirm(\'Are you sure you want to delete this item?\')) return false;" class="btn btn-default" href="Press.php?action=delete&id=' . $value['id'] . '">Delete</a></td>';

                echo '</tr>';
                echo '</table>';

注意我有substr,当我有它时,它不会显示描述并破坏我的表格的其余部分,如果我删除 substr 表格很好并且所有内容都会显示。为什么substr 打破了我的桌子。

【问题讨论】:

  • 让我猜猜,$value['description'] 包含 HTML 标记?您应该始终转义 HTML 输出。
  • This question 似乎是相关的。
  • 你能举个例子说明描述将包含什么吗?
  • 这可能失败的另一个原因是 substr() 在使用 UTF-8 时会愉快地切开字符的中间,在这种情况下使用 mb_substr() 会有所帮助。

标签: php substr


【解决方案1】:

可能是包含 HTML 标记的描述内容破坏了表格,使用 htmlspecialchars...

echo '<td>' . htmlspecialchars(substr($value['description'], 0, 10)) . '</td>';

【讨论】:

  • 这可能达不到预期的效果,因为它只会按原样显示 HTML :)
【解决方案2】:

那是因为你的substr 连接了一些 HTML 元素的一半吗?

例如,您应该使用:

echo htmlentities(substr($value['description'], 0, 10));

或者如果你想去掉 HTML 标签:

echo strip_tags(substr($value['description'], 0, 10));

【讨论】:

  • 在使用strip_tags() 时,您仍将希望使用htmlspecialchars()