Преглед изворни кода

Fixes the problem of subjects with entities getting trimmed too short.

graf25 пре 24 година
родитељ
комит
74660a55d6
1 измењених фајлова са 26 додато и 5 уклоњено
  1. 26 5
      functions/mailbox_display.php

+ 26 - 5
functions/mailbox_display.php

@@ -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;