Ispirato dal 3D ho provato a risolvere solo con le regex, sembrerebbero funzionare...sembrerebbero
:
codice:
$len = 20;
# Dovrebbe approssimare per eccesso
preg_match("/^(?=(.{{$len},}?\b))/s",$testo,$mth1);
echo $mth1[1].'...';
# Dovrebbe approssimare per difetto
preg_match("/^(?=(.{1,$len})\b)/s",$testo,$mth2);
echo $mth2[1].'...';
EDIT: sembra funzionare anche con replace
codice:
echo preg_replace("/^(?=(.{{$len},}?\b)).*$/s",'$1...',$testo);
echo preg_replace("/^(?=(.{1,$len})\b).*$/s",'$1...',$testo);