2012-01-12 39 views
0

不知道是否有一个PHP函数可以帮助确定这一点。PHP strlen()和字符串的宽度

我有一些可变字符的字符串。我的问题是字符串有多长,而不是有多少字符。

$str1 = '123456789'; 
$str2 = 'akIOuNBGH'; 

两者都有9个字符。不过,由于字符较宽,第二个在浏览器中稍长。

最终我想在两个字符串之后附加'.............'一系列的点,但由于第二个和第一个宽度不一样,所以一致性是关闭。

任何很酷的想法或如何确定字符串宽度的方式? 也许,如果我知道宽度值,我可以适当地编码附加信息。

+1

我相信CSS会更适合这个。请参阅http://www.css3.info/preview/text-overflow/。 – 0b10011 2012-01-12 03:43:45

+1

字符串宽度取决于字体,我怀疑有一种方法可以找出默认字体。尝试使用等宽字体围绕它,所以所有字符的宽度都相同。 – personak 2012-01-12 03:45:12

+0

你不能确定你的情况下的字符串宽度,它必须在客户端上完成。考虑一个javascript解决方案,这很简单,就像在div/span中渲染文本(不可见或放置在屏幕外)并检索其宽度。请参阅:http://stackoverflow.com/questions/118241/calculate-text-width-with-javascript – al01 2012-01-12 03:57:20

回答

0

由于vucetica提到monospaced字体如CourierCourier New可以帮助您归档字符之间的等间距。

此外,如果你想确保所有的字符串是例如相同长度为32个字符,你可以使用sprintf方法

$string = '1234567890'; 
$string = sprintf("%'.-32s", $string); 
var_dump($string); //string(32) "1234567890......................" 

更多语法的例子可以在PERL documentation被发现,其中90%在PHP工作

1

宽度取决于您在客户端使用的字体类型来表示这些字符串。对于某些字体(不知道究竟是哪一种,但我认为是Courier),宽度与字符数量成正比,所以简单的填充字符串将起作用。对于其他字体,它将不起作用,并取决于浏览器如何呈现它。如果您试图在服务器端对齐字符串,则会以最糟糕的方式进行。尝试使用CSS对齐它们。