Intereting Posts
Не удалось загрузить файл https://packagist.org/packages.json конвертировать любую строку даты в метку времени без часового пояса Проблема с CodeIgniter и URI на серверах GoDaddy Лучший способ передать значения функции, когда их много? использовать более одного мета-ключа в запросе, используя posts_where в wordpress Безопасный способ удаленного PHP? Как предотвратить Предупреждение: длина содержимого и размер памяти POST Ошибка mysql при вставке изображения в базу данных mysql jqgrid пользовательские данные JSON отсутствуют, но не отображаются данные Php7.1 Неустранимая ошибка: оператор не поддерживается для строк Как установить токен Remember в Laravel с помощью Google OAuth Mockery, определяющий ожидаемые аргументы для нескольких вызовов Необлученное сообщение об ошибке «PDOException» «недопустимое имя источника данных» Как структурировать этот SQL-запрос. Объединение нескольких таблиц? проверьте, является ли строка URL-адресом

Как добавить разрыв строки в середине точки, разделенной пробелами

Использование php: как я могу вставить разрыв строки в пробелы, который попадает в относительную середину строки? Или, другими словами, как мне подсчитать слова в предложении, а затем положить разрыв строки в предложении на полпути?

Идея состоит в том, чтобы избегать вдов (оставленных слов) во второй строке заголовков статей блога, по существу сокращая каждый заголовок пополам и помещая его на две строки, если заголовок занимает более одной строки.

Заранее спасибо.

Обновление: Привет всем, я понял, что мне нужна функция preg_split, чтобы разделить заголовок на пробелы. Извините, если эта часть не была ясна в вопросе. Я изменил ответ Асафа и использовал это:

$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, и я взорван силой сообщества. Приветствия.

Используйте wordwrap() PHP. Вы можете использовать длину вашей строки, деленную на 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 />'); 

ОБНОВЛЕНО

 <?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
дождь снаружи, и если Дэвид в порядке с ним.

EDIT : Добавлен PHP_EOL для соответствия всей системе и html с помощью <br />