|
|
|
|
@ -513,4 +513,28 @@ class Util { |
|
|
|
|
} |
|
|
|
|
return self::$needUpgradeCache; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Sometimes a string has to be shortened to fit within a certain maximum |
|
|
|
|
* data length in bytes. substr() you may break multibyte characters, |
|
|
|
|
* because it operates on single byte level. mb_substr() operates on |
|
|
|
|
* characters, so does not ensure that the shortend string satisfies the |
|
|
|
|
* max length in bytes. |
|
|
|
|
* |
|
|
|
|
* For example, json_encode is messing with multibyte characters a lot, |
|
|
|
|
* replacing them with something along "\u1234". |
|
|
|
|
* |
|
|
|
|
* This function shortens the string with by $accurancy (-5) from |
|
|
|
|
* $dataLength characters, until it fits within $dataLength bytes. |
|
|
|
|
* |
|
|
|
|
* @since 23.0.0 |
|
|
|
|
*/ |
|
|
|
|
public static function shortenMultibyteString(string $subject, int $dataLength, int $accuracy = 5): string { |
|
|
|
|
$temp = mb_substr($subject, 0, $dataLength); |
|
|
|
|
// json encodes encapsulates the string in double quotes, they need to be substracted |
|
|
|
|
while ((strlen(json_encode($temp)) - 2) > $dataLength) { |
|
|
|
|
$temp = mb_substr($temp, 0, -$accuracy); |
|
|
|
|
} |
|
|
|
|
return $temp; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|