终止检查<br/>

时间:2012-08-31 23:07:35

标签: php mysql select while-loop

在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,不起作用。

有什么建议吗?

我想这样做,如果该行中有一个链接,它将不会将其切断,直到它转到一个新行,并且它知道它已完成,因此链接将完成。

6 个答案:

答案 0 :(得分:2)

我不能给你一个简短的答案,因为这很困难...... 像Symfony这样的框架已经内置了该函数(在smarty,symfony等中查看truncate。)

但我发现了一个有用的功能示例:HERE -- truncate($text, $length = 100, $ending = '...', $exact = false, $considerHtml = true)

答案 1 :(得分:0)

在服务器端执行此操作。我还建议反对SELECT *(全部)。始终使用列列表。

$result = mysql_query("SELECT SUBSTR(content, 0, 350) AS content FROM `news`");

while($row = mysql_fetch_array($result)) {

    $show = nl2br($row['content']);
}

和往常一样,请stop using mysql_函数。

<强>更新

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

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

答案 2 :(得分:0)

写入宽度有限的div框:

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

答案 3 :(得分:0)

$show = nl2br(substr(trim(strip_tags($row['content'])), 0, $length));

答案 4 :(得分:0)

使用此CSS:

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

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

答案 5 :(得分:0)

我的理解是你要为文章或类似的东西生成预告片。我使用generate_teaser函数的组合,基本上执行substr而不切割单词或句子中间的文本,并使用close_tags函数尝试(并且通常成功)关闭标签(警告:它可能无法正确关闭表)。目前我无法向您提供我使用的代码,但我可以告诉您,它受这两个实现的启发(并进行了改进):node_teaserclosetags