如何在按空格分割的字符串的中点添加换行符

时间:2012-05-04 18:21:29

标签: php string text

使用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的新手,我被社区的力量所震撼。欢呼声。

2 个答案:

答案 0 :(得分:5)

使用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输出,可以使用可选的3rd参数指定中断字符。像这样:

$wrapped = wordwrap($sentence, $width, '<br />');

答案 1 :(得分: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;
?>

制作:

  

如果不是&lt; br /&gt; \ n
,我明天会去学校       在外面下雨,如果大卫对它好的话。

编辑:添加了PHP_EOL以匹配所有系统加html与&lt; br /&gt;