Fixes the problem of subjects with entities getting trimmed too short.
authorgraf25 <graf25@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 9 Feb 2001 17:08:21 +0000 (17:08 +0000)
committergraf25 <graf25@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 9 Feb 2001 17:08:21 +0000 (17:08 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1095 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/mailbox_display.php

index e534c9360f5e43a80748ebacc4fdb320fb9911ce..ddbb61298993fa2fd523b8449f0325b4419712ee 100644 (file)
                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;