【问题标题】:End of line check for <br /><br /> 行尾检查
【发布时间】:2012-08-26 18:02:10
【问题描述】:

在 PHP 中,我试图以最大字符限制显示一行内容,所以

$result = mysql_query("SELECT * FROM `news`");

$length = 350; // Show first 350 characters of row, then cut it off

while($row = mysql_fetch_array($result)) {
$show = nl2br(substr($row['content'], 0, $length));
}

P.S: 代码标签搞砸了,$length 不在 while 循环中。

使用 while() 语句来增加 strpos 的 $length,不起作用。

有什么建议吗?

我想做这个,万一线路有链接,它不会把它切断,直到换到新的线路,它知道它已经完成,所以链接就完成了。

【问题讨论】:

标签: php mysql select while-loop


【解决方案1】:

我不能给你一个简短的回答这个问题,因为它很难...... 像 Symfony 这样的框架已经内置了这个功能(看看 smarty、symfony 等中的truncate

但我找到了一个有用的函数示例:HERE -- truncate($text, $length = 100, $ending = '...', $exact = false, $considerHtml = true)

【讨论】:

  • 我得研究一下,这个函数看起来和我需要的完全一样,我会读它等等,但是要通过一些带有截断函数的框架。我很感激,谢谢。
  • 我必须在这里添加(要完整),问题是在扫描标签时打开到结束标签的完全匹配......这个 CAN 是用 RegEx 和 Backreferences 完成,但这会严重影响这个问题 ;)
【解决方案2】:

写入一个宽度有限的 div 框:

<div style="width=100px; display: inline-block;">

【讨论】:

    【解决方案3】:

    在服务器端进行。我还建议不要使用SELECTing *(全部)。始终使用列列表。

    $result = mysql_query("SELECT SUBSTR(content, 0, 350) AS content FROM `news`");
    
    while($row = mysql_fetch_array($result)) {
    
        $show = nl2br($row['content']);
    }
    

    一如既往,请stop usingmysql_函数。

    更新

    我忽略了阅读整个要求。这应该有效:

    SELECT
        CASE
            WHEN LOCATE('</a>', content) > 350 THEN SUBSTRING(@str, 1, LOCATE('</a>', content)+4)
            ELSE SUBSTRING(content, 1, 350)
        END
    FROM `news`
    

    【讨论】:

    • 完全不是重点? REAL 问题是:“如何在不破坏 TAGS 的情况下截断文本”
    • “TheHe”说的是我要找的,我贴的代码不是我实际使用的代码,类似但不一样,我没用过mysql过一会儿。
    【解决方案4】:
    $show = nl2br(substr(trim(strip_tags($row['content'])), 0, $length));
    

    【讨论】:

      【解决方案5】:

      使用这个 CSS:

      .wrap-link {
        word-wrap: break-word;
      }
      

      这样,不是切断链接文本或根据任意字符限制手动换行(无论如何都会不一致),任何比其容器宽度长的单词(例如长网址)都将是强制自动换行。

      【讨论】:

        【解决方案6】:

        我的理解是你想为一篇文章或类似的东西生成一个预告片。我使用 generate_teaser 函数的组合,该函数基本上执行 substr 而不会在单词或句子中间剪切文本,而 close_tags 函数尝试(并且通常成功)关闭标签(警告:它可能无法正确关闭表)。目前我不能给你我使用的代码,但我可以告诉你,它的灵感来自(并改进了)这两个实现:node_teaserclosetags

        【讨论】:

          猜你喜欢
          • 2015-07-15
          • 2019-11-21
          • 2018-09-01
          • 2021-07-21
          • 1970-01-01
          • 1970-01-01
          • 2023-04-07
          • 2020-07-16
          • 1970-01-01
          相关资源
          最近更新 更多