智能单词换行?

时间:2014-09-22 12:12:41

标签: php word-wrap

我正在使用PHP,其中包含以下字符串:

$message = 'hello, DavidPalmerUgroImmIErogandTagroChechiken ho are you?';

如果字符串的ANY字长word,我想分割15 characters。我怎么能这样做?

我搜索并找到了分割WHOLE字符串的答案,但是如果该特定字长度超过15个字符,则不仅仅是拆分WORD。请帮忙!

3 个答案:

答案 0 :(得分:3)

这是一个相对的基本解决方案,有些东西你可以改进(更好的单词检测,14个字母,然后是连字符,用于中断的单词等),但这应该给你一个良好的起点。

你也可以用正则表达式(/[^\s]{15,}/作为基本起点)来做到这一点,如果你对此感到满意 - 只需马匹参加课程: - )


将字符串拆分为单词:

$words = explode(' ', $message); // could also split on other punctuation or detect words more reliably here

迭代这些单词以查看是否有> 15个字母

foreach ($words AS $key => $word) {
    if (strlen($word) > 15) {
        // ...
    }
}

然后当你找到一个时,把它切成更小的部分

$words[$key] = implode(' ', str_split($word, 15));

最后,加入所有备份。

$words = implode(' ', $words);

完整代码:

$words = explode(' ', $message); // could also split on other punctuation or detect words more reliably here

foreach ($words AS $key => $word) {
    if (strlen($word) > 15) {
        $words[$key] = implode(' ', str_split($word, 15));
    }
}

$words = implode(' ', $words);

答案 1 :(得分:3)

你也可以尝试这样的事情。

$newMessage = preg_replace('/(\S{15})(?=\S)/', '$1 ', $message);

答案 2 :(得分:0)

使用

获取单词的大小
$length = strlen($yourword);

然后如果那个大于15,你可以使用chunksplit将它分成更小的块。