1

我需要将一大块文本分成相同大小的段落,并使用完全相同数量的字符串行以保持它们的统一,我目前正在使用以下代码使用 php 进行操作。

        function arrangeText(){
                    if (have_posts()) : while (have_posts()) :  the_post();

                    $content = strtolower(get_the_content());
                    $content = trim(strip_tags($content));
                    $post_len = strlen($content);
                    $segmentCont = 1; 
                    $auxOffset = 0; 
                    $auxOffset2 = 0;
                    $limit = 896; 
                    $limitTotal = 0;

                    while($limitTotal<$post_len){

                            if($segmentCont==2) {
                                $limit = 943;
                            }

                            $segmentCont++;
                            $limitTotal = $limitTotal + $limit;
                            if($limitTotal<$post_len)
                             { $auxOffset = strpos($content," ",$limitTotal);}
                            else 
                             { $auxOffset = $post_len;}
                            $post_segment = trim(substr($content,$auxOffset2,$auxOffset-$auxOffset2));
                            $auxOffset2 = $auxOffset;
                            echo_segment($post_segment);
                    }

                    endwhile;                       
                    endif;
                }

这实际上可行,但即使我计算每个字符,某些字符可能最多占用三个字符空间,所以我的段落有不同的行数,或者最后一行被切成两半,如果我使用 monotypefont 一切顺利,但我的客户想要一种特定的字体,而我一直在尝试各种事情,但都没有运气,所以我来找大佬们帮忙。我唯一能想到解决这个问题的是一个非常复杂的脚本来获取每个字符的宽度我回显并将该值每次添加到计数变量中,并执行条件(我猜是在循环内)检查总数是否字符的宽度超过了我的段落的总宽度,如果在它找到的最后一个“”(空白)之前将它切片(防止代码将单词切成两半),但我不知道这是否可以用 php、js ,

编辑 1:我的错,单行距字体也不起作用,它们在我的 p 标签(溢出:隐藏)下方被剪切和溢出,我虽然他们一直在工作,直到我阅读文本,所以我猜即使它们是等距的,它们的字符大小也不同。

4

2 回答 2

1

我认为一个非常好的主意是有一个 Key,Value 是 Character,Size 的字典,然后当你迭代而不是每个字符都算作一个字符时,它们算作“Size”(使用字典快速查找)。但是,如果字符不完全等于另一个字符大小的倍数,这可能不起作用。

你怎么看?

于 2012-10-17T05:19:11.297 回答
1

您可以使用此代码测量字符的宽度并创建“字典”。
您可以调整它以返回相对值(比如说w = 1i = 0.5它会更灵活)。

小提琴在这里:http: //jsfiddle.net/Gw4AV/

var chars = ["a", "b", "c", "i", "w"];
var widths = [];
for (var i = 0; i < chars.length; i++)
{
    var span = $("<span>").text(chars[i]);
    $("body").append(span);
    widths.push(span.width());
}
alert(widths);
​
于 2012-10-17T14:55:37.133 回答