因此,在我正在处理的网页中,用户输入了一个 html 格式的描述并将其添加到正在工作的数据库中,当我拉入描述并将其缩短为 150 个字符并添加“... “它弄乱了我的 html,因为有时标签会打开。任何建议都会很棒
问问题
895 次
3 回答
0
这是对类似问题的一个很好的答案。您必须计算标签并添加被截断的标签。
伪代码
userData = getUserInput();
stack = array();
loop (line in userData) {
matches = search for "<*>"; // may have multiple on one line
loop (match in matches) {
tagName = getTagNameFrom(match);
if ("/" is not found) {
push tagName on stack;
} else if ("/" is found) {
pop tagName off stack;
// There was an error if the stack is
// empty or the tagName that was popped was not
// the same.
}
}
}
foreach tagName in stack {
userdata += "</" + tagName + ">";
}
顺便说一句,您的网页听起来很容易受到 XSS 的攻击。
于 2013-10-16T20:57:02.023 回答
0
您可以使用 strip_tags 的某种组合并在不同的标签上进行拆分,以将部分内容缩短到 150 个字符。
您可以使用称为省略号的 CSS 样式。一个例子:
:
.ellipsisClass {
width: 250px; // you MUST set a width
white-space: nowrap; // you MUST set nowrap
overflow: hidden; // you MUST set overflow to hidden
text-overflow: ellipsis; // and then you can use text-overflow: ellipsis
}
于 2013-10-16T20:57:24.340 回答
0
您可以参考以下链接的解决方案:https ://github.com/dhngoc/php-cut-html-string 。如果要在切割后在字符串末尾添加“...”。您必须调整函数 cutHtmlString,请参阅以下行代码:
$opened_tags = array_reverse($opened_tags);
foreach ($opened_tags as $key => $item) {
$act_str = $act_str . '</'.$item.'>';
}
改成
$opened_tags = array_reverse($opened_tags);
foreach ($opened_tags as $key => $item) {
if ($key == 0) {
$act_str = $act_str . '...</'.$item.'>';
} else {
$act_str = $act_str . '</'.$item.'>';
}
}
于 2014-09-21T03:58:55.597 回答