|
@@ -112,11 +112,32 @@
|
|
|
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;
|