と、作ってみたらこうなりましたがもっとスマートになるやろみたいなツッコミは要りません。あしからず。
$text="テストテキストテストテキスト<a href='about:blank;'>テストテキスト</a>テストテキスト~~~テストテキスト";
$content = strip_tags($text,"<a>");
if(mb_strlen($content) > 90){
preg_match_all('/<a href=(.*?)>(.*?)<\/a>/', $content, $matches, PREG_OFFSET_CAPTURE);
$content = preg_replace('/<a href=(.*?)>(.*?)<\/a>/i','@@$2@@', $content);
$content = mb_strimwidth($content,0,90+(count($matches[0])*4),"…","UTF-8");
foreach($matches[2] as $key=>$val){
$content = preg_replace('/@@'.$val[0].'@@/', $matches[0][$key][0], $content, 1);
}
$content = str_replace("@@","",$content);
}
前後のリンクタグを@@で置換してから切り取ってから戻す。
これで同じ単語に別のリンクが付いていてもリンクの間で切られることになっても大丈夫。のはず。
0 件のコメント:
コメントを投稿