]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/Strings.php
Model/Photo: use self select functions, reuse backend, fix quotes, add delete()
[friendica.git] / src / Util / Strings.php
index ceb1a946a1702406b85ea7673e93a709976f5544..a11ac2fd5831582c302f15cb42a41d5a031e7fe9 100644 (file)
@@ -5,6 +5,9 @@
 
 namespace Friendica\Util;
 
+use Friendica\Content\ContactSelector;
+use Friendica\Core\Logger;
+
 /**
  * @brief This class handles string functions
  */
@@ -28,14 +31,7 @@ class Strings
     }
 
     /**
-     * This is our primary input filter.
-     *
-     * The high bit hack only involved some old IE browser, forget which (IE5/Mac?)
-     * that had an XSS attack vector due to stripping the high-bit on an 8-bit character
-     * after cleansing, and angle chars with the high bit set could get through as markup.
-     *
-     * This is now disabled because it was interfering with some legitimate unicode sequences
-     * and hopefully there aren't a lot of those browsers left.
+     * @brief This is our primary input filter.
      *
      * Use this on any text input where angle chars are not valid or permitted
      * They will be replaced with safer brackets. This may be filtered further
@@ -44,7 +40,7 @@ class Strings
      * @param string $string Input string
      * @return string Filtered string
      */
-    public static function removeTags($string) // notags()
+    public static function escapeTags($string)
     {
         return str_replace(["<", ">"], ['[', ']'], $string);
     }
@@ -56,7 +52,7 @@ class Strings
      * 
      * @return string
      */
-    public static function escapeTags($string) // escape_tags()
+    public static function escapeHtml($string)
     {
         return htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false);
     }
@@ -68,7 +64,7 @@ class Strings
      * 
      * @return string
      */
-    public static function getRandomName($len) // autoname()
+    public static function getRandomName($len)
     {
         if ($len <= 0) {
             return '';
@@ -144,18 +140,18 @@ class Strings
     }
 
     /**
-     * @brief translate and format the networkname of a contact
+     * @brief Translate and format the network name of a contact
      *
-     * @param string $network   Networkname of the contact (e.g. dfrn, rss and so on)
-     * @param string $url       The contact url
+     * @param string $network Network name of the contact (e.g. dfrn, rss and so on)
+     * @param string $url     The contact url
      * 
-     * @return string   Formatted network name
+     * @return string Formatted network name
      */
-    public static function formatNetworkName($network, $url = 0) // format_network_name()
+    public static function formatNetworkName($network, $url = '')
     {
-        if ($network != "") {
-            if ($url != "") {
-                $network_name = '<a href="'.$url.'">'.ContactSelector::networkToName($network, $url)."</a>";
+        if ($network != '') {
+            if ($url != '') {
+                $network_name = '<a href="' . $url  .'">' . ContactSelector::networkToName($network, $url) . '</a>';
             } else {
                 $network_name = ContactSelector::networkToName($network);
             }
@@ -165,7 +161,7 @@ class Strings
     }
 
     /**
-     * @brief Remove intentation from a text
+     * @brief Remove indentation from a text
      * 
      * @param string $text  String to be transformed.
      * @param string $chr   Optional. Indentation tag. Default tab (\t).
@@ -220,7 +216,7 @@ class Strings
      * 
      * @return string   Transformed string.
      */
-    public static function protectSprintf($s) // protect_sprintf()
+    public static function protectSprintf($s)
     {
         return str_replace('%', '%%', $s);
     }
@@ -233,7 +229,7 @@ class Strings
      * 
      * @return string   Encoded URL
      */
-    public static function base64UrlEncode($s, $strip_padding = false) //base64url_encode()
+    public static function base64UrlEncode($s, $strip_padding = false)
     {
         $s = strtr(base64_encode($s), '+/', '-_');
 
@@ -250,7 +246,7 @@ class Strings
      * 
      * @return string   Decoded URL
      */
-    public static function base64url_decode($s) // base64url_decode()
+    public static function base64UrlDecode($s)
     {
         if (is_array($s)) {
             Logger::log('base64url_decode: illegal input: ' . print_r(debug_backtrace(), true));
@@ -276,92 +272,6 @@ class Strings
         return base64_decode(strtr($s, '-_', '+/'));
     }
 
-    /**
-     * @brief Pull out all #hashtags and @person tags from $string.
-     *
-     * We also get @person@domain.com - which would make
-     * the regex quite complicated as tags can also
-     * end a sentence. So we'll run through our results
-     * and strip the period from any tags which end with one.
-     * Returns array of tags found, or empty array.
-     *
-     * @param string $string Post content
-     * 
-     * @return array List of tag and person names
-     */
-    public static function getTags($string) // get_tags()
-    {
-        $ret = [];
-
-        // Convert hashtag links to hashtags
-        $string = preg_replace('/#\[url\=([^\[\]]*)\](.*?)\[\/url\]/ism', '#$2', $string);
-
-        // ignore anything in a code block
-        $string = preg_replace('/\[code\](.*?)\[\/code\]/sm', '', $string);
-
-        // Force line feeds at bbtags
-        $string = str_replace(['[', ']'], ["\n[", "]\n"], $string);
-
-        // ignore anything in a bbtag
-        $string = preg_replace('/\[(.*?)\]/sm', '', $string);
-
-        // Match full names against @tags including the space between first and last
-        // We will look these up afterward to see if they are full names or not recognisable.
-
-        if (preg_match_all('/(@[^ \x0D\x0A,:?]+ [^ \x0D\x0A@,:?]+)([ \x0D\x0A@,:?]|$)/', $string, $matches)) {
-            foreach ($matches[1] as $match) {
-                if (strstr($match, ']')) {
-                    // we might be inside a bbcode color tag - leave it alone
-                    continue;
-                }
-
-                if (substr($match, -1, 1) === '.') {
-                    $ret[] = substr($match, 0, -1);
-                } else {
-                    $ret[] = $match;
-                }
-            }
-        }
-
-        // Otherwise pull out single word tags. These can be @nickname, @first_last
-        // and #hash tags.
-
-        if (preg_match_all('/([!#@][^\^ \x0D\x0A,;:?]+)([ \x0D\x0A,;:?]|$)/', $string, $matches)) {
-            foreach ($matches[1] as $match) {
-                if (strstr($match, ']')) {
-                    // we might be inside a bbcode color tag - leave it alone
-                    continue;
-                }
-                if (substr($match, -1, 1) === '.') {
-                    $match = substr($match,0,-1);
-                }
-                // ignore strictly numeric tags like #1
-                if ((strpos($match, '#') === 0) && ctype_digit(substr($match, 1))) {
-                    continue;
-                }
-                // try not to catch url fragments
-                if (strpos($string, $match) && preg_match('/[a-zA-z0-9\/]/', substr($string, strpos($string, $match) - 1, 1))) {
-                    continue;
-                }
-                $ret[] = $match;
-            }
-        }
-
-        return $ret;
-    }
-
-    /**
-     * @brief Check for a valid email string
-     *
-     * @param string $email_address Email address to be evaluated.
-     * 
-     * @return boolean  Value indicating whether or not the string is a valid email address.
-     */
-    public static function isValidEmail($email_address) // valid_email()
-    {
-        return preg_match('/^[_a-zA-Z0-9\-\+]+(\.[_a-zA-Z0-9\-\+]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/', $email_address);
-    }
-
     /**
      * @brief Normalize url
      *
@@ -369,7 +279,7 @@ class Strings
      * 
      * @return string   Normalized URL.
      */
-    public static function normaliseLink($url) // normalise_link()
+    public static function normaliseLink($url)
     {
         $ret = str_replace(['https:', '//www.'], ['http:', '//'], $url);
         return rtrim($ret, '/');
@@ -382,7 +292,7 @@ class Strings
      * 
      * @return string   normalized OpenId Identity
      */
-    function normaliseOpenID($s) // normalize_openid()
+    function normaliseOpenID($s)
     {
         return trim(str_replace(['http://', 'https://'], ['', ''], $s), '/');
     }
@@ -398,8 +308,24 @@ class Strings
      * @return boolean True if the URLs match, otherwise False
      *
      */
-    public static function compareLink($a, $b) // link_compare()
+    public static function compareLink($a, $b)
     {
-        return (strcasecmp(normalise_link($a), normalise_link($b)) === 0);
+        return (strcasecmp(self::normaliseLink($a), self::normaliseLink($b)) === 0);
     }
+
+
+       /**
+        * Ensures the provided URI has its query string punctuation in order.
+        *
+        * @param string $uri
+        * @return string
+        */
+       public static function ensureQueryParameter($uri)
+       {
+               if (strpos($uri, '?') === false && ($pos = strpos($uri, '&')) !== false) {
+                       $uri = substr($uri, 0, $pos) . '?' . substr($uri, $pos + 1);
+               }
+
+               return $uri;
+       }
 }