Прежде всего, загляните на страницу руководства wordwrap . Там, в разделе Пользовательские заметки , вы можете найти код для функции переноса слов, которая извлекает все теги html, оборачивает остальные слова и помещает теги html обратно.
Затем, чтобы ответить на ваш вопрос, попробуйте немного отладить и поделитесь результатами, отредактировав свой вопрос. Что попробовать:
Приведенный пример должен выглядеть следующим образом:
<a href="http://www.vodafone.co.uk/vodafone-uk/about-this-site/terms-and-conditions/products-and-services/bonus-bank/index.htm"
title="http://www.vodafone.co.uk/vodafone-uk/about-this-site/terms-and-conditions/products-and-services/bonus-bank/index.htm"
target=_blank><i>Short Link</i></font></a>
но выглядит так, верно?
<a href="http://www.vodafone.co.uk/vodafone-uk/about-this-site/terms-and-conditions/products"
title="http://www.vodafone.co.uk/vodafone-uk/about-this-site/terms-and-conditions/products"
target=_blank><i>Short Link</i></font></a>
-and-services/bonus-bank/index.htm
Итак, сначала посмотрим, что делает с этим wordwrap:
$teststring = '<a href="http://www.vodafone.co.uk/vodafone-uk/about-this-site/terms-and-conditions/products-and-services/bonus-bank/index.htm"
title="http://www.vodafone.co.uk/vodafone-uk/about-this-site/terms-and-conditions/products-and-services/bonus-bank/index.htm"
target=_blank><i>Short Link</i></font></a>';
echo wordwrap($teststring, 83, "\n", true);
Если вы сделали это, вставьте HTML-код результата, как он есть, в ваш вопрос.
Попробуйте эту функцию (из справочная страница php для wordwrap ):
здесь был код, но он не был хорошего качества
Я не проверял, но если он работает, вам повезло, верно?
Теперь вы заставили меня немного попробовать, и вот мой результат:
function get_tags_array($str)
{
//given a string, return a sequential array with html tags in their own elements
$q = '?';
return preg_split("/(<.*$q>)/",$str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}
function html_combi_wordwrap($str, $width = 75, $break = "\n", $cut = false)
{
$tag_arr = get_tags_array($str);
foreach($tag_arr as $key => $tag_str)
{
if(preg_match("/<.*>/", $tag_str))
continue;
$tag_arr[$key] = wordwrap($tag_str, $width, $break, $cut);
}
return implode($tag_arr);
}
Это объединяет идею этого кода (то есть, только обтекание текста без тегов html) с обычной функцией переноса слов, которая все еще может быть заменена вариантом utf-8 или чем-то еще ...