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;
                }

これは実際には機能しますが、各文字を数えても、一部の文字は最大 3 文字のスペースを取る場合があるため、段落の行数が異なるか、最後の行が半分にスライスされます。モノタイプフォントを使用すると、すべてがスムーズに進みますが、クライアントが特定のフォントを欲しがっていて、あらゆる種類のことを試してみましたがうまくいきませんでした。これを解決するために想像できる唯一のことは、非常に複雑なスクリプトで、エコーしている各文字の幅を取得し、その値を毎回カウント変数に追加し、合計が文字の幅が段落の合計幅を超えている場合は、最後の " " (空白) の前にスライスします (コードが単語を半分にカットするのを防ぎます) が、php、js でこれが可能かどうかはわかりません、

編集 1: 悪いことに、モノスペース フォントでもうまくいきません。p タグ ( overflow:hidden ) の下でカットされてオーバーフローしていました。等幅ですが、文字サイズも異なります。

4

2 に答える 2

1

キー、値が文字、サイズの辞書を作成し、各文字を「サイズ」としてカウントするのではなく、繰り返し処理することをお勧めします(辞書を使用した高速検索)。ただし、文字が他の文字のサイズの倍数と正確に等しくない場合、これは機能しない可能性があります。

あれについてどう思う?

于 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 に答える