$line) { if (iconv_strlen(trim($msg . "\n" . $line), "UTF-8") <= $limit) { $msg = trim($msg . "\n" . $line); } elseif (($msg == "") || (($row == 1) && (substr($msg, 0, 4) == $recycle))) { // Is the new message empty by now or is it a reshared message? $msg = iconv_substr(iconv_substr(trim($msg . "\n" . $line), 0, $limit, "UTF-8"), 0, -3, "UTF-8") . $ellipsis; } else { break; } } return $msg; } /** * Returns the character positions of the provided boundaries, optionally skipping a number of first occurrences * * @param string $text Text to search * @param string $open Left boundary * @param string $close Right boundary * @param int $occurrences Number of first occurrences to skip * @return boolean|array */ public static function getBoundariesPosition($text, $open, $close, $occurrences = 0) { if ($occurrences < 0) { $occurrences = 0; } $start_pos = -1; for ($i = 0; $i <= $occurrences; $i++) { if ($start_pos !== false) { $start_pos = strpos($text, $open, $start_pos + 1); } } if ($start_pos === false) { return false; } $end_pos = strpos($text, $close, $start_pos); if ($end_pos === false) { return false; } $res = ['start' => $start_pos, 'end' => $end_pos]; return $res; } }