]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/Strings.php
Merge pull request #8727 from MrPetovan/task/8676-ap-attachments
[friendica.git] / src / Util / Strings.php
index c520b54b9ba508f1aaaa42331585c6d92ee5dc25..04d676ef57364ac87ad5c37cb3aff83a53afd672 100644 (file)
@@ -369,13 +369,27 @@ class Strings
         * @param array  $chars
         * @return bool
         */
-       public static function startsWith($string, array $chars)
+       public static function startsWithChars($string, array $chars)
        {
                $return = in_array(substr(trim($string), 0, 1), $chars);
 
                return $return;
        }
 
+       /**
+        * Check if the first string starts with the second
+        *
+        * @param string $string
+        * @param string $start
+        * @return bool
+        */
+       public static function startsWith(string $string, string $start)
+       {
+               $return = substr_compare($string, $start, 0, strlen($start)) === 0;
+
+               return $return;
+       }
+
        /**
         * Returns the regular expression string to match URLs in a given text
         *
@@ -420,4 +434,42 @@ class Strings
 
                return $pathItem;
        }
+
+       /**
+        * Multi-byte safe implementation of substr_replace where $start and $length are character offset and count rather
+        * than byte offset and counts.
+        *
+        * Depends on mbstring, use default encoding.
+        *
+        * @param string   $string
+        * @param string   $replacement
+        * @param int      $start
+        * @param int|null $length
+        * @return string
+        * @see substr_replace()
+        */
+       public static function substringReplace(string $string, string $replacement, int $start, int $length = null)
+       {
+               $string_length = mb_strlen($string);
+
+               $length = $length ?? $string_length;
+
+               if ($start < 0) {
+                       $start = max(0, $string_length + $start);
+               } else if ($start > $string_length) {
+                       $start = $string_length;
+               }
+
+               if ($length < 0) {
+                       $length = max(0, $string_length - $start + $length);
+               } else if ($length > $string_length) {
+                       $length = $string_length;
+               }
+
+               if (($start + $length) > $string_length) {
+                       $length = $string_length - $start;
+               }
+
+               return mb_substr($string, 0, $start) . $replacement . mb_substr($string, $start + $length, $string_length - $start - $length);
+       }
 }