echo "<a href=\"read_body.php?mailbox=$urlMailbox&passed_id=".$msg["ID"]."&startMessage=$startMessage&show_more=0$search_stuff\"";
do_hook("subject_link");
echo ">$flag";
- if (strlen($subject) > 55)
- echo substr($subject, 0, 50) . '...';
- else
- echo $subject;
- echo "$flag_end</a>$bold_end</td>\n";
+ if (strlen($subject) > 55){
+ $ent_strlen=strlen($subject);
+ $trim_val=50;
+ // see if this is entities-encoded string
+ if (is_int(strpos($subject, "&#"))){
+ // Yes. Iterate through the whole string, find out
+ // the real number of characters, and if more
+ // than 55, substr with an updated trim value.
+ $ent_offset=0;
+ $ent_count=0;
+ do {
+ $ent_loc = strpos($subject, "&#", $ent_offset);
+ $ent_loc_end = strpos($subject, ";", $ent_offset);
+ if ($ent_loc_end){
+ $trim_val += ($ent_loc_end-$ent_loc)+1;
+ $ent_strlen -= $ent_loc_end-$ent_loc;
+ $ent_offset = $ent_loc_end+1;
+ $ent_count++;
+ } else $ent_loc=false;
+ } while (is_int($ent_loc));
+ }
+ if ($ent_strlen>55) echo substr($subject, 0, $trim_val) . '...';
+ else echo $subject;
+ } else echo $subject;
+
+ echo "$flag_end</a>$bold_end</td>\n";
break;
case 5: # flags
$stuff = false;