2017年9月12日火曜日

地味に使う小技 リンクを残したまま文字数制限

リンクを残したまま一覧で出すけど文字数も1行程度って、言ったら簡単だけどポンとやっちゃう関数もないしどうやったらええんや。
と、作ってみたらこうなりましたがもっとスマートになるやろみたいなツッコミは要りません。あしからず。

$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 件のコメント:

コメントを投稿