PHP strlen() и ширина строки

Не уверен, что есть функция php, которая может помочь определить это.

У меня есть несколько строк с переменными символами. Моя проблема заключается в том, насколько длинна строка, а не в том, сколько в ней символов.

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

Оба имеют 9 символов. Однако второй немного длиннее в браузере из-за более широких символов.

В конечном итоге я хотел бы добавить '.............' серию точек после двух строк, но, поскольку вторая и первая не имеют одинаковой ширины, единообразие отключено.

Любые интересные идеи или способы определения ширины строки? Возможно, если я знаю значения ширины, я смогу соответствующим образом закодировать добавленную информацию.


person coffeemonitor    schedule 12.01.2012    source источник
comment
Я считаю, что CSS лучше подходит для этого. См. css3.info/preview/text-overflow.   -  person 0b10011    schedule 12.01.2012
comment
Ширина строки зависит от шрифта, и я сомневаюсь, что есть способ узнать шрифт по умолчанию. Попробуйте окружить его моношириной, чтобы все символы имели одинаковую ширину.   -  person personak    schedule 12.01.2012
comment
Вы не можете определить ширину строки в вашем случае, это нужно сделать на клиенте. Рассмотрим решение javascript, которое просто отрисовывает текст в div/span (невидимом или размещенном за пределами экрана) и получает его ширину. См.: stackoverflow.com/questions/118241/   -  person al01    schedule 12.01.2012
comment
Какова будет цель? Возможно, есть лучший способ подойти к ситуации, которую вы дали. Если вы просто спрашиваете, есть ли функциональность PHP ни с того ни с сего, есть возможность использовать GD (может быть, даже imagefontwidth) каким-то хитрым способом).   -  person Zack Zatkin-Gold    schedule 12.01.2012


Ответы (2)


Как упоминал vucetica моноширинные шрифты, такие как Courier или Courier New, могут помочь вам заархивировать равные интервалы между символами.

Также, если вы хотите убедиться, что все строки имеют одинаковую длину, например 32 символа, вы можете использовать sprintf метод

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

Дополнительные примеры синтаксиса можно найти в документации по PERL, 90% которой работает на php.

person Nazariy    schedule 12.01.2012

Ширина зависит от типа шрифта, который вы используете на стороне клиента для представления этих строк. Для некоторых шрифтов (не знаю точно, для каких, но я думаю, например, для Courier) ширина прямо пропорциональна количеству символов, поэтому простое заполнение ваших строк будет работать. Для других шрифтов это не сработает и будет зависеть от того, как его отображают браузеры. Если вы пытаетесь выровнять свои строки на стороне сервера, вы делаете это наихудшим из возможных способов. Попробуйте выровнять их с помощью CSS.

person Aleksandar Vucetic    schedule 12.01.2012