1

因此,在我正在处理的网页中,用户输入了一个 html 格式的描述并将其添加到正在工作的数据库中,当我拉入描述并将其缩短为 150 个字符并添加“... “它弄乱了我的 html,因为有时标签会打开。任何建议都会很棒

4

3 回答 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
  1. 您可以使用 strip_tags 的某种组合并在不同的标签上进行拆分,以将部分内容缩短到 150 个字符。

  2. 您可以使用称为省略号的 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 回答