|
|
|
Перенос и разбиение слов в HTML
При создании различных лент новостей и колонок онлайн газет, web дизайнеры и программисты сталкиваются с ситуацией, когда в тексте попадается очень длинное слово (синхрофазотрон). Браузер при форматировании разбивает текст в тех местах, где есть пробелы (дефисы). Длинные слова при этом остаются нетронутыми, что часто приводит к "разъезжанию" ячеек таблицы, неаккуратному внешнему виду. Каким образом можно решить эту проблему?
А решить эту проблему можно PHP функцией.
Позаимствованая с сайта http://www.enlight.ru/ib/tech/split/index.htm
# -----------------------------------------------------------------------------
# Если в строке $s встречается слово (последовательность символов без пробелов)
# длиннее чем $wordmaxlen , оно ограничивается тэгами $leftlimit, $rightlimit и
# разбивается тэгами $hyp на несколько слов, каждое из которых не
# длиннее $wordmaxlen. Тэги бывшие в $s изначально - не затрагиваются.
#
# Примеры:
# ($s,2,'<nobr>','</nobr>','<wbr>')
# ($s,2,'','','<wbr>')
# ($s,2,'','','­')
# ($s,2,'','','­<wbr>')
# -----------------------------------------------------------------------------
function SplitText($s,$wordmaxlen,$leftlimit,$rightlimit,$hyp)
{
$marker = "\x01";
# Сохраняем все тэги чтобы уберечь их от разбивки
# Заменяем все тэги на маркеры
# Разбиваем текст на слова
for ($i=0; $i<count($words); $i++)
{
# Каждое слово >= $wordmaxlen разбиваем
if (strlen($words[$i])>=$wordmaxlen)
$words[$i] = $leftlimit . chunk_split($words[$i],$wordmaxlen,$hyp) . $rightlimit;
}#for
# Собираем строку из уже разбитых на части слов
# Восстанавливаем тэги, места которых были отмечены маркерами
for ($i=0; $i<count($tags[1]); $i++)
return $s;
}#SplitText
Немножко переделав под свои нужды. получилось следующее:
function conv_text_br($text)
{
$wordmaxlen=50;
$hyp="<br>";
$marker = "\x01";
$words = split(' ',$text);
for ($i=0; $i<count($words); $i++)
{
if (strlen($words[$i])>=$wordmaxlen)
}
for ($i=0; $i<count($tags[1]); $i++)
$text = preg_replace("/$marker/si", $tags[1 ][$i], $text, 1 );
return $text;
}
Возможно кто то ломает голову над этой проблемой, вот вам решение.
Работает во всех браузерах.
Чт, 11/19/2009 - 14:24 — X3M-Slider
|
|