Основываясь на ответе @ JonnyLitt, вот мой взгляд на проблему:
<?php
function insertSoftBreak($string, $interval=20, $breakChr='­') {
$splitString = explode(' ', $string);
foreach($splitString as $key => $val) {
if(strlen($val)>$interval) {
$splitString[$key] = wordwrap($val, $interval, $breakChr, true);
}
}
return implode(' ', $splitString);
}
$string = 'Hello, My name is fwwfdfhhhfhhhfrhgrhffwfweronwefbwuecfbryhfbqpibcqpbfefpibcyhpihbasdcbiasdfayifvbpbfawfgawg, because that is my name.';
echo insertSoftBreak($string);
?>
Разбивая строку на разделенные пробелами значения, проверяйте длину каждого отдельного «слова» (слова включают такие символы, как точка, запятая или вопросительный знак). Для каждого слова проверьте, превышает ли длина $interval
символов, и если да, вставьте ­
(мягкий дефис) в каждый $interval
'-й символ.
Я выбрал мягкие дефисы, потому что они кажутся относительно хорошо поддерживаемыми во всех браузерах, и обычно они не отображаются, если слово не переносится в эту позицию.
Мне неизвестны какие-либо другие пригодные (и хорошо поддерживаемые) сущности HTML, которые можно было бы использовать вместо этого (‌
, по-видимому, не работает в FF 3.6, по крайней мере), поэтому, если поддержка кросс-браузера для ­
превратится без этого лучше всего использовать чистое решение на основе CSS или Javascript.