3

在 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));
}

PS:代码标签对我来说搞砸了, $length 不在 while 循环中。

使用 while() 语句来增加 strpos 的 $length 是行不通的。

有什么建议么?

我想这样做,以防线路中有链接,它不会将其切断,直到它转到新线路,并且它知道它已经完成,所以链接将是完整的。

4

6 回答 6

2

我不能给你一个简短的答案,因为它很难......像 Symfony 这样的框架已经内置了这个功能(看看truncatesmarty,symfony 等)

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

于 2012-08-31T23:15:53.173 回答
0

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

于 2012-08-31T23:44:06.793 回答
0

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

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

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

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

和往常一样,请停止使用 mysql_函数。

更新

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

SELECT
    CASE
        WHEN LOCATE('</a>', content) > 350 THEN SUBSTRING(@str, 1, LOCATE('</a>', content)+4)
        ELSE SUBSTRING(content, 1, 350)
    END
FROM `news`
于 2012-08-31T23:12:13.350 回答
0

使用这个 CSS:

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

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

于 2012-08-31T23:39:19.907 回答
0

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

<div style="width=100px; display: inline-block;">
于 2012-08-31T23:20:05.370 回答
0
$show = nl2br(substr(trim(strip_tags($row['content'])), 0, $length));
于 2012-08-31T23:34:17.373 回答