Index: views.module
===================================================================
--- views.module	(revision 9573)
+++ views.module	(working copy)
@@ -1315,12 +1315,27 @@
  */
 function views_trim_text($alter, $value) {
   if (drupal_strlen($value) > $alter['max_length']) {
+
+    $orig_value = $value;
     $value = drupal_substr($value, 0, $alter['max_length']);
     if (!empty($alter['word_boundary'])) {
-      if (preg_match("/(.*)\b.+/us", $value, $matches)) {
+
+      $remains = substr($orig_value, strlen($value)); // we can use non-unicode aware substr() and strlen() here
+      $exact_cutoff = !strlen($remains) || preg_match("/^\p{Z}/us", $remains); // strlen() check only for safety reason
+
+      if (!$exact_cutoff && preg_match("/(.*)\p{Z}/us", $value, $matches)) {
         $value = $matches[1];
       }
+      else if ($exact_cutoff)
+      {
+        // trim remaining word separators at the end (loop required because for many consecutive word separator
+        // characters, \p{Z} matches only once)
+        while (preg_match("/(.*)\p{Z}$/us", $value, $matches)) {
+          $value = $matches[1];
+        }
+      }
     }
+
     // Remove scraps of HTML entities from the end of a strings
     $value = rtrim(preg_replace('/(?:<(?!.+>)|&(?!.+;)).*$/us', '', $value));
 
