4

私の問題は次のとおりです。私はこのような文字列を持っています:

$string = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";

この文字列を幅100ピクセルのコンテナに出力します。単語が10文字より長い場合、10文字の後にスペースを自動的に挿入する方法はありますか?

$string = chunk_split($string, 10);

単語の途中にスペースが挿入されるため、適切な解決策ではありません。例えば:

$string = "This is why chunk_split doesn't work";
$string = chunk_split($string, 10);
echo $string;
// OUTPUT: This is wh y chunk_sp lit doesn' t work 

重要なのは、スペース文字を使用すると、文字列で改行を作成できるということです。


必要な出力:

$string = "This is how it should work.";
$string = function_i_am_looking_for($string);
echo $string;
// OUTPUT: This is how it should work.


$string = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
$string = function_i_am_looking_for($string);
echo $string;
// OUTPUT: AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA
4

7 に答える 7

5

親要素の外に拡張するのではなく、文字列を強制的に折り返すだけの場合は、css で直接行うことができ、文字列をいじる必要はまったくありません。

p { 
  width: 100px; 
  word-wrap: break-word; 
}

<p>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</p>

これにより、サーバー上でそれを理解しようとするのではなく、ブラウザーがどこを壊す必要があるかを判断できるようになります。

于 2013-03-10T19:57:00.703 に答える
3

wordwrap ()を使用するWordwrap は、最大幅に達する前に文を完全な単語ごとにカットします。次の例ではtrue、最後のパラメータを変更して、常に 10 文字でカットするようにしました。

$short = wordwrap($string, 10, PHP_EOL, true);

別のオプションは

$short = wordwrap($string, 10, '<br>', true);

ただし、文字の幅が常に同じであるとは限らないため(フォントの種類が異なるため)、文字数で切り取るのは安全ではありません。

最適なオプションは<div>、文の最後の部分に a を配置することです。

于 2013-03-10T19:55:54.987 に答える
2

<wbr/>これを HTML で表示する予定がある場合は、スペースの代わりに追加してみてください

于 2013-03-10T19:53:23.367 に答える
2

preg_replace()でこれを行うことができます:

$string = preg_replace('/(\S{10})(?=\S)/', '$1 ', $string);

これにより、10 個の非スペース文字 ( \S) の各連続ブロックの後にスペースが挿入され、その後に少なくとも 1 つの非スペース文字が続きます。

また、通常のスペースの代わりに、ソフト ハイフン(U+00AD) または Unicodeゼロ幅スペース(U+200B) を挿入することをお勧めします。


編集: sachleen と他の人が指摘したように、実際の問題に対する最善の解決策は、おそらくCSS word-wrap プロパティ、具体的にはword-wrap: break-word.

于 2013-03-10T19:53:27.243 に答える
1

これをHTMLで使用する場合は、CSSワードラップを参照してください

#foo { 
  width: 100px;
  word-wrap: break-word;
}

デモ

于 2013-03-10T20:00:49.817 に答える
0

ポイントは、これらの「単語」がレイアウトを壊さないようにすることだと思います。そのような「単語」の長さは単語でさえない可能性が高く、それらを分割しても読みやすくならない可能性があるため、それらを削除しないのはなぜですか?

$content = preg_replace("~\w{11,}~","",$content);

于 2013-03-10T19:52:50.587 に答える
0

別の代替..

$string = preg_replace_callback(
  "~\w{11,}~",
  create_function(
    '$m',
    'return chunk_split($m[0],10," ");'
  ),
  $string);
于 2013-03-10T20:10:08.353 に答える