<?php

function measure($str) {
  return strlen(html_entity_decode(strip_tags($str)));
}
 
$str = '<strong>foobar ulklkj lkjlkj</strong>';
 
print strlen($str) . "\n";
 
$maxlength = 8;
 
$cutlength = $maxlength;
 
while (0 < $delta = $maxlength - measure(substr($str, 0, $cutlength))) {
    print "\nDELTA: " . $delta . "\n";
    $cutlength += $delta;
}
 
while (preg_match('#[a-zA-Z0-9]#', $str{$cutlength})) {
    ++$cutlength;
}
 
print "\nEND DELTA: " . $delta . "\n";
 
print substr($str, 0, $cutlength);