6

使用 php:如何在字符串相对中间的空白处插入换行符?或者换句话说,我如何计算一个句子中的单词,然后在句子中途换行?

这个想法是通过将每个标题切成两半并将其放在两行(如果标题占用超过一行)来避免博客文章标题的第二行出现寡妇(被遗弃的单词)。

提前致谢。

更新:大家好,我意识到我需要 preg_split 函数用空格分割标题。抱歉,如果该部分在问题中不清楚。我修改了 Asaph 的答案并使用了这个:

$title_length = strlen($title);
if($title_length > 30){
    $split = preg_split('/ /', $title, null, PREG_SPLIT_NO_EMPTY);
    $split_at = ceil(count($split) / 2);
    echo $split_at;
    $broken_title = '';
    $broken = false;
    foreach($split as $word_pos => $word){
        if($word_pos == $split_at  && $broken == false){
            $broken_title.= '<br />'."\n";
            $broken = true;
        }
        $broken_title .= $word." ";
    }
    $title = $broken_title;
}   

我是 SO 的新手,我被社区的力量所震撼。干杯。

4

2 回答 2

6

使用 PHP 的wordwrap()函数。您可以使用字符串的长度除以 2 作为第二个参数。这是一个例子:

<?php
$sentence = 'This is a long sentence that I would like to break up into smaller pieces.';
$width = strlen($sentence)/2;
$wrapped = wordwrap($sentence, $width);
echo $wrapped;
?>

它输出:

This is a long sentence that I would
like to break up into smaller pieces.

如果您想要 HTML 输出,您可以使用可选的第三个参数来指定中断字符。像这样:

$wrapped = wordwrap($sentence, $width, '<br />');
于 2012-05-04T18:26:50.833 回答
0

更新

<?php
$Sentence = 'I will go to the school tomorrow if it is not raining outside and if David is ok with it.';
$Split = explode(' ', $Sentence);

$SplitAt = 0;
foreach($Split as $Word){
    $SplitAt+= strlen($Word)-1;
    if($SplitAt >= strlen($Sentence)){
        break;
    }
}

$NewSentence = wordwrap($Sentence, $SplitAt, '<br />' . PHP_EOL);


echo $NewSentence;
?>

产生这个:

如果外面没有下雨,我明天会去学校<br />\n
如果大卫没问题的话。

编辑:添加 PHP_EOL 以匹配所有系统加上带有 <br /> 的 html

于 2012-05-04T18:27:17.107 回答