我正在寻找一种使用 PHP 将文本包装到特定宽度框中的方法。我有动态文本字符串进来,并且字体大小可变。
我从这个线程中找到了一种按照我想要的方式剪切文本的好方法: Smarter word-wrap in PHP for long words?
使用此代码块:
function smart_wordwrap($string, $width = 10, $break = "\n") {
// split on problem words over the line length
$pattern = sprintf('/([^ ]{%d,})/', $width);
$output = '';
$words = preg_split($pattern, $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
foreach ($words as $word) {
if (false !== strpos($word, ' ')) {
// normal behaviour, rebuild the string
$output .= $word;
} else {
// work out how many characters would be on the current line
$wrapped = explode($break, wordwrap($output, $width, $break));
$count = $width - (strlen(end($wrapped)) % $width);
// fill the current line and add a break
$output .= substr($word, 0, $count) . $break;
// wrap any remaining characters from the problem word
$output .= wordwrap(substr($word, $count), $width, $break, true);
}
}
// wrap the final output
return wordwrap($output, $width, $break);
}
这很好用,但我需要找到一种方法将设置的像素尺寸(约束框)和字体大小输入到上面。上面的函数使用字符数——如果字体大小很明显,字符数需要更大,反之亦然。
如果我有以下变量,无论如何我可以这样做吗?
$boxWidth = 200(px);
$text = (dynamic string);
$font = 'customfont.ttf'
$fontSize = (dynamic size);
我在想换行功能的另一个循环。或者也许有一种方法可以编辑“爆炸”,因为我不完全确定该功能是如何工作的。