以像素为单位截断给定宽度的php字符串

时间:2014-02-01 20:13:26

标签: javascript php html

我想通过PHP截断从MySQL数据库中获取的给定字符串以适合给定的像素。我发现的大多数解决方案都基于字符数。但我根据像素长度特别想要它。(我不想使用等宽字体)

我发现$('#idName').width()可以在JavaScript中用于拟合。这对于用HTML编写的字符串很简单。但这是交易。我的字符串是一个存储在PHP中的变量,我需要JavaScript来获取像素的宽度,我需要在具有特定id名称的span(HTML)中包含该字符串。

所以,我试图使用PHP,HTML和JavaScript中的所有三个来使它工作。以下是我的代码。

<?php
  $len=100;
?>

<span id='d' style="display:none;"><?php echo substr($details,0,$len) ?></span>
<script>
    var len=370;

    while($('#d').width()>len){
    <?php 
      $len=$len-1; 
      echo "<span id='d' style='display:none;'>" . substr($details,0,$len) . "</span>";
    ?>
    }
    <?php echo substr($details,0,$len); ?>
</script>

所以我把我的字符串前100个字母放在一个标识为d的范围内。然后在JavaScript中,我得到它的宽度并检查while循环。我运行while循环(保持递减$len)直到子串的像素长度在所需的宽度内,并保持在具有相同id的span中重新划分该子串。然后我打印那个子串。

有人可以更改代码以使其工作或建议更好的方法吗?我是新手,所以请尽可能简单。

2 个答案:

答案 0 :(得分:2)

据我所知,你的问题是,当字符串长于给定的容器时,你试图隐藏溢出?

我宁愿建议使用overflow:hidden;空白:NOWRAP;也许是一些文本溢出:省略号;在容器结束之前制作“...”效果。但你必须记住,大多数浏览器和操作系统的字体呈现方式不同,因此Windows上的用户体验可能与Mac上的不同。

答案 1 :(得分:0)

那可能行不通。 JS和PHP不能像这样混合。 while循环没用。

我想到的一个解决方案是你可以先通过ajax获取PHP字符串,然后使用JS根据宽度显示它。