diff options
author | Thomas Lange <code@nerdmind.de> | 2018-01-08 23:13:49 +0100 |
---|---|---|
committer | Thomas Lange <code@nerdmind.de> | 2018-01-08 23:13:49 +0100 |
commit | b0fba5798b576e05de0654c0414a7f6df9b3e39b (patch) | |
tree | 7fe9e2dae8c1da454f283cd7faf7d6c097a1757a | |
parent | ebb890d0c6280653360045d13ca233b68697be2b (diff) | |
download | blog-b0fba5798b576e05de0654c0414a7f6df9b3e39b.tar.gz blog-b0fba5798b576e05de0654c0414a7f6df9b3e39b.tar.xz blog-b0fba5798b576e05de0654c0414a7f6df9b3e39b.zip |
Bugfix: Incorrect behavior of the "truncate" function in some circumstances:
If the first word from $string was longer than $length characters, then the regular expression had not truncated the string at all (for example, a string with a total length of 2000 characters was displayed without any cut, but with the $replace string at the end).
This bug has been reported by Markus Hackspacher (https://github.com/MarkusHackspacher).
-rw-r--r-- | core/functions.php | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/core/functions.php b/core/functions.php index 36d87d5..ad63334 100644 --- a/core/functions.php +++ b/core/functions.php @@ -232,10 +232,13 @@ function getRandomValue($length = 40): string { #=============================================================================== function truncate($string, $length, $replace = '') { if(mb_strlen($string) > $length) { - $truncated = preg_replace("/^(.{1,{$length}}\\b).*/su", '$1', $string); + $truncated = preg_replace("/^(.{0,{$length}}\\b).*/su", '$1', $string); $truncated = trim($truncated); - return "{$truncated}{$replace}"; + # The additional trim call is useful, because if $truncated is empty, + # then there will be an unnecessary space between those two variables + # if $replace is preceded by a space (for example: " […]"). + return trim("{$truncated}{$replace}"); } return $string; |