在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,不起作用。
有什么建议吗?
我想这样做,如果该行中有一个链接,它将不会将其切断,直到它转到一个新行,并且它知道它已完成,因此链接将完成。
答案 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_teaser
和closetags
。