在php中,将一行文本拆分为没有任何明显断点的行[第2部分]
我在这里得到了三个非常有用的答案: 它似乎添加了在php中,将一行文本拆分为没有任何明显断点的行[第2部分],php,scripting,programming-languages,formatting,Php,Scripting,Programming Languages,Formatting,我在这里得到了三个非常有用的答案: 它似乎添加了true作为wordwrap的选项,修复了这个问题,但它严重破坏了另一个函数,我无法使用它。该函数与此问题的思路相同,它获取长URL并将锚文本截断为“短URL” 你知道为什么wordwraptrueaddition会破坏这一点吗?我看到在“短URL”后面打印的URL设置限制之后的任何字符,这很奇怪 function long_links($stringa){ $m = preg_match_all('/(www\.|http:\/\/|http
true
作为wordwrap
的选项,修复了这个问题,但它严重破坏了另一个函数,我无法使用它。该函数与此问题的思路相同,它获取长URL并将锚文本截断为“短URL”
你知道为什么wordwraptrue
addition会破坏这一点吗?我看到在“短URL”后面打印的URL设置限制之后的任何字符,这很奇怪
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;
}
函数长链接($stringa){
$m=preg\u match\u all('/(www.\.\http:\/\/\/\124; https:\/\/)([^\s]+)/',$stringa,$match);
如果($m){$links=$match[0];
对于($j=0;$j 59){
$stringa=STRU替换($loco,,$stringa);
}
}
返回$stringa;
}
为什么这会中断$body=wordwrap($body,83,“\n”,true);回声体代码>
我看到的溢出的一个例子是:
*短URL*条件/产品和服务/奖金银行/index.htm
根据马丁的问题进行编辑
$body=长链接($body)$body=wordwrap($body,83,“\n”,true);回声体代码>
再次感谢 首先,请看一下。在那里,在用户提供的注释一节中,您可以找到wordwrap函数的代码,该函数去掉所有html标记,wordwrap其余部分并将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
-和服务/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);
$teststring='';
echo wordwrap($teststring,83,“\n”,true);
如果你已经这样做了,请把结果的html代码,因为它是代码,进入你的问题
尝试此功能(从):
这里有代码,但质量不好
我没试过,但如果成功的话,你很幸运,对吧
现在你让我尝试一下,这是我的结果:
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);
}
函数获取标签数组($str)
{
//给定一个字符串,返回一个在其自身元素中包含html标记的序列数组
$q='?';
返回preg_split(“/()/”,$str,-1,preg_split_DELIM_CAPTURE | preg_split_NO_EMPTY);
}
函数html\u combi\u wordwrap($str,$width=75,$break=“\n”,$cut=false)
{
$tag\u arr=get\u tags\u数组($str);
foreach($tag\u arr as$key=>$tag\u str)
{
如果(预匹配(“/”,$tag\u str))
持续
$tag_arr[$key]=wordwrap($tag_str,$width,$break,$cut);
}
返回内爆($tag_arr);
}
这结合了(只有没有html标记的包装文本)和常规的wordwrap函数的思想,该函数仍然可以被utf-8变体或其他什么替换…您在哪里调用long\u links()
函数(关于您问题中的$body=…
行)?您确定long\u links()在添加换行符之前工作过吗?你所说的功能现在“坏了”是什么意思?请你给我们看一下包装好的长链接的html代码。谢谢,Martin:-和services/bonus bank/index.htm
。当我将长链接
的顺序与和wordwrap
交换时,短链接仍然有效,但所有非短链接都失败了,即只是文本而不是“HREF”。看看我的答案,太长了,无法发表评论,但可能无法100%回答您的问题……感谢您的帮助,Martin。如果你知道我的意思的话,你的最后一个片段正是导致第二个片段的原因。换句话说,你的第三个代码片段正是我所拥有的,它破坏了短链接输出并导致文本溢出。这有什么启示吗?谢谢,我已经尝试了手册页上的一些,但没有成功:(@JonathanRoss让我们看看,我今天晚些时候或者明天有时间。再次感谢!!