我在这里收到了三个非常有用的答案:
Break up one line of text without any discernible break points in PHP
似乎添加了true
作为wordwrap
的选项解决了问题,但它破坏了另一个功能,我不能使用它。该函数与此问题一脉相承,并抓取长URL并将锚文本截断为“Short URL”。
为什么wordwrap true
添加会破坏这一点的任何想法?我看到在“短网址”之后打印的网址设置限制之后的任何字符都很奇怪。
function long_links($stringa){
$m = preg_match_all('/(www\.|http:\/\/|https:\/\/)([^\s]+)/', $stringa, $match);
if ($m){ $links=$match[0];
for ($j=0;$j<$m;$j++){
$loco=$links[$j]; $len=strlen($loco);
if($len > 59){
$stringa = str_replace($loco,'<a href="'.$loco.'" title="'.$loco.'" target=_blank><i>Short Link</i></a>',$stringa);
}
}
return $stringa;
}
为什么会中断$body = wordwrap($body, 83, "\n", true); echo $body;
?
我看到的漏油事件的一个例子是:
*Short URL* conditions/products-and-services/bonus-bank/index.htm
按照马丁的提问编辑
$body=long_links($body); $body = wordwrap($body, 83, "\n", true); echo $body;
再次感谢!
答案 0 :(得分:0)
首先,看看wordwrap man page。在那里,在用户贡献的笔记部分,你可以找到一个wordwrap函数的代码,它取出所有的html标签,wordwraps其余部分并重新放入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代码作为代码放入您的问题中。
尝试此功能(来自the php man page for 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);
}
这结合了this code的概念(也就是说,只包装没有html标签的文本)和常规的wordwrap函数,它仍然可以被utf-8变体或其他任何东西取代......