根据容器宽度截断PHP字符串

时间:2014-02-02 23:42:26

标签: php jquery html mysql css

上下文:想象一下文章预览流,点击后会导致他们自己的网页(不相关)。

每个预览都将包含一个标题和一个内容样本(字符串),该内容来自所代表文章的顶部,附加了“read more”锚点。 底部的简单示例。

我的目标:截断超出预览容器宽度的任何文本。标题是一行,内容为三行。

现在,我不是特别确定PHP能够根据容器宽度修剪字符串。但我知道,可以修剪一定数量的字符,如this。我的代码很相似......

// $data is an associate array full of stuff

foreach ($data as $key => $row) {
    $data[$key]['artcl_trunc_title'] 
        = (strlen($row['artcl_title']) > 100) ? $trimmed = substr($row['artcl_title'], 0, 100) . '..' : $row['artcl_title'];



    $data[$key]['artcl_trunc_content'] 
        = (strlen($row['artcl_content']) > 300) ? substr($row['artcl_content'], 0, 300) . '.. <a href="">READ MORE</a>' : $row['artcl_content'];
}

问题在于根据设定的数字修剪文本。除了并非所有字符都具有相同的宽度之外,这不会成为问题。请看以下示例(两行都是20个字符。)

  

....................

     

WWWWWWWWWWWWWWWWWWWW

现在,这是一个问题的真实例子(这两篇文章具有相同的理论特征上限......标题20,内容50)

  

寂寞的温柔......

     

所以这个孩子永远不会离开他的家...... 阅读更多

     

-

     

WainWright的指南...

     

我写了这本指南,以帮助那些有专业人士的人阅读更多

这里看起来并不太糟糕,但你可以看到两个内容和标题之间的长度不同。按比例放大并且您正在尝试精确填充一定数量的线条时,这是一场噩梦(因为有时线条可能会出现或消失,具体取决于所使用的字符。)

另外,我并不热衷于使用css溢出:隐藏文字有时会被削减一半。

那么..关于如何处理这个或最佳实践的任何想法? 感谢

TL; DR:正如标题所说。

1 个答案:

答案 0 :(得分:0)

我会使用text-overflow: ellipsis;指令对CSS执行此操作。