我有一个具有可变宽度的div,因此无法在PHP中预测其大小。 如果有人输入一个长字符串,该字符串没有用空格分隔,则浏览器将拉伸页面,这会非常烦人。 我试图为此使用自动wordwrap功能,但是我永远找不到合适的宽度,并且输出出现问题。

这是我正在尝试的方法,基于在wordwrap的文档页面上留下的评论:

<?php
//Using &#8203; here allows the browser to break the line of text, without the visual distraction. 
$line = wordwrap($line, 10, "&#8203;", true);
?>

注释继续说明它是一个零宽度空格字符,它将告诉浏览器它可以自由运行但不会显示。

我相信您已经看到出现的两个问题。 它也会用零宽度的空间代替普通空间,所以我想到了这样的东西: This is a​test.​Hello,​Stackoverf​low! This​ought to​trigger a​couple of​breaks. This is a​test.​Hello,​Stackoverf​low! This​ought to​trigger a​couple of​breaks.

我还为此编写了一个小的bbcode解析器,并且由于剪切了标签,它也破坏了我的html输出。

从好的方面来说,令人难以置信的长单词被打破了!

我试过在CSS的div上设置各种溢出属性,但它们均未达到预期的功能。

===============>>#1 票数:1 已采纳

有以下CSS属性:

word-wrap: break-word;

否则,如果您想保留此PHP,则最好只对字符数大于X的单词应用一个分隔符,这将在空格上拆分字符串并对每个单词进行检查。 您可能会遇到链接问题,但可以轻松检查起始url字符或应用正则表达式。

$text = 'this text is fine but waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay long stuff gets broken waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay  up into bits';

if($array = explode(' ',$text) and is_array($array))
{
  foreach($array as $key => $value)
  {
    if(strlen($value) > 10)
      $array[$key] =  wordwrap($value, 10, "&shy;", true);
  }
  $text = implode(' ',$array);
}

echo $text;

在此示例中,长度大于10的单词将用&shy;换行。 字符,非常有用,因为它会在休息时产生柔和的连字符。 如果您不希望使用其他连字符,请用破字符替换它。 您也可以尝试使用比最大长度小的数字自动换行,即IE strlen> 20,自动换行为10

范例: http//i.imgur.com/fKINR.png

===============>>#2 票数:0

这对我有用:

    <?
      ini_set("display_errors", TRUE);
      error_reporting(-1 ^ E_NOTICE);
      header("Content-Type: text/html; charset=utf-8");
      $line = "This is a​ test.​ Hello,​ Stackoverf​low! This​ ought to​ trigger a ​couple of​ breaks";
      $line = wordwrap($line, 10, "\n", true);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
      <head>
        <title>Linebreak Test</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
     </head>
     <body>
      <div style="white-space: pre"><?=$line?></div>
     </body>
    </html>

  ask by Cyclone translate from so

未解决问题?本站智能推荐: