X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FStrings.php;h=88dd1d39f81edd151151dac1ba6b7449528dd871;hb=a61ce4fed0eba0c1cee3b96e81be6fa89e96c9f9;hp=48e580d67892587ab648f2f0960c8a5193094caf;hpb=d4a02dc31408210ab9f67ecac1948dc22b95b8da;p=friendica.git diff --git a/src/Util/Strings.php b/src/Util/Strings.php index 48e580d678..88dd1d39f8 100644 --- a/src/Util/Strings.php +++ b/src/Util/Strings.php @@ -13,12 +13,13 @@ use Friendica\Core\Logger; */ class Strings { - /** - * @brief Generates a pseudo-random string of hexadecimal characters - * - * @param int $size - * @return string - */ + /** + * @brief Generates a pseudo-random string of hexadecimal characters + * + * @param int $size + * @return string + * @throws \Exception + */ public static function getRandomHex($size = 64) { $byte_size = ceil($size / 2); @@ -30,6 +31,18 @@ class Strings return $return; } + /** + * Checks, if the given string is a valid hexadecimal code + * + * @param string $hexCode + * + * @return bool + */ + public static function isHex($hexCode) + { + return !empty($hexCode) ? @preg_match("/^[a-f0-9]{2,}$/i", $hexCode) && !(strlen($hexCode) & 1) : false; + } + /** * @brief This is our primary input filter. * @@ -139,19 +152,20 @@ class Strings return $word; } - /** - * @brief translate and format the networkname of a contact - * - * @param string $network Networkname of the contact (e.g. dfrn, rss and so on) - * @param string $url The contact url - * - * @return string Formatted network name - */ - public static function formatNetworkName($network, $url = 0) + /** + * Translate and format the network name of a contact + * + * @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 + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + public static function formatNetworkName($network, $url = '') { - if ($network != "") { - if ($url != "") { - $network_name = '' . ContactSelector::networkToName($network, $url) . ""; + if ($network != '') { + if ($url != '') { + $network_name = '' . ContactSelector::networkToName($network, $url) . ''; } else { $network_name = ContactSelector::networkToName($network); } @@ -161,7 +175,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). @@ -240,12 +254,13 @@ class Strings return $s; } - /** - * @brief Decode Base64 Encoded URL and translate -_ to +/ - * @param string $s URL to decode - * - * @return string Decoded URL - */ + /** + * @brief Decode Base64 Encoded URL and translate -_ to +/ + * @param string $s URL to decode + * + * @return string Decoded URL + * @throws \Exception + */ public static function base64UrlDecode($s) { if (is_array($s)) { @@ -292,7 +307,7 @@ class Strings * * @return string normalized OpenId Identity */ - function normaliseOpenID($s) + public static function normaliseOpenID($s) { return trim(str_replace(['http://', 'https://'], ['', ''], $s), '/'); } @@ -312,4 +327,80 @@ class Strings { 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; + } + + + /** + * Check if the trimmed provided string is starting with one of the provided characters + * + * @param string $string + * @param array $chars + * @return bool + */ + public static function startsWith($string, array $chars) + { + $return = in_array(substr(trim($string), 0, 1), $chars); + + return $return; + } + + /** + * Returns the regular expression string to match URLs in a given text + * + * @return string + * @see https://daringfireball.net/2010/07/improved_regex_for_matching_urls + */ + public static function autoLinkRegEx() + { + return '@ +(??«»“”‘’.] # Domain can\'t start with a . + [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’]+ # Domain can\'t end with a . + \. + [^/\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’]+/? # Followed by a slash + ) + (?: # One or more: + [^\s\xA0()<>]+ # Run of non-space, non-()<> + | # or + \(([^\s\xA0()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels + | # or + [^\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’] # not a space or one of these punct chars + )* +)@xiu'; + } + + /** + * Ensures a single path item doesn't contain any path-traversing characters + * + * @see https://stackoverflow.com/a/46097713 + * @param string $pathItem + * @return string + */ + public static function sanitizeFilePathItem($pathItem) + { + $pathItem = str_replace('/', '_', $pathItem); + $pathItem = str_replace('\\', '_', $pathItem); + $pathItem = str_replace(DIRECTORY_SEPARATOR, '_', $pathItem); // In case it does not equal the standard values + + return $pathItem; + } }