The expression return self::str_split($str) returns an array which contains values of type array|string[] which are incompatible with the documented value type string.
Loading history...
503
}
504
505
/**
506
* This method will auto-detect your server environment for UTF-8 support.
507
*
508
* @return true|null
509
*
510
* @internal <p>You don't need to run it manually, it will be triggered if it's needed.</p>
511
*/
512
5
public static function checkForSupport()
513
{
514
5
if (!isset(self::$SUPPORT['already_checked_via_portable_utf8'])) {
* @param string $str <p>The string to be normalized.</p>
4989
* @param bool $keep_non_breaking_space [optional] <p>Set to true, to keep non-breaking-spaces.</p>
4990
* @param bool $keep_bidi_unicode_controls [optional] <p>Set to true, to keep non-printable (for the web)
4991
* bidirectional text chars.</p>
4992
* @param bool $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p>
4993
*
4994
* @psalm-pure
4995
*
4996
* @return string
4997
* <p>A string with normalized whitespace.</p>
4998
*/
4999
public static function normalize_whitespace(
5000
string $str,
5001
bool $keep_non_breaking_space = false,
5002
bool $keep_bidi_unicode_controls = false,
5003
bool $normalize_control_characters = false
5004
): string {
5005
61
return ASCII::normalize_whitespace(
5006
61
$str,
5007
61
$keep_non_breaking_space,
5008
61
$keep_bidi_unicode_controls,
5009
61
$normalize_control_characters
5010
);
5011
}
5012
5013
/**
5014
* Calculates Unicode code point of the given UTF-8 encoded character.
5015
*
5016
* INFO: opposite to UTF8::chr()
5017
*
5018
* EXAMPLE: <code>UTF8::ord('☃'); // 0x2603</code>
5019
*
5020
* @param string $chr <p>The character of which to calculate code point.<p/>
5021
* @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
5022
*
5023
* @psalm-pure
5024
*
5025
* @return int
5026
* <p>Unicode code point of the given character,<br>
5027
* 0 on invalid UTF-8 byte sequence</p>
5028
*/
5029
public static function ord($chr, string $encoding = 'UTF-8'): int
5030
{
5031
/**
5032
* @psalm-suppress ImpureStaticVariable
5033
*
5034
* @var array<string,int>
5035
*/
5036
27
static $CHAR_CACHE = [];
5037
5038
// init
5039
27
$chr = (string) $chr;
5040
5041
27
if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
The expression return self::str_ireplac...ch, $replacement, $str) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
5620
}
5621
5622
/**
5623
* Replaces all occurrences of $search in $str by $replacement.
5624
*
5625
* @param string $str <p>The input string.</p>
5626
* @param array $search <p>The elements to search for.</p>
5627
* @param array|string $replacement <p>The string to replace with.</p>
5628
* @param bool $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
The expression return self::str_ireplac...ch, $replacement, $str) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
5646
}
5647
5648
/**
5649
* Replace the diamond question mark (�) and invalid-UTF8 chars with the replacement.
It seems like you do not handle an error condition for mb_substitute_character(). This can introduce security issues, and is generally not recommended.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-unhandled annotation
If you suppress an error, we recommend checking for the error condition explicitly:
// For example instead of@mkdir($dir);// Better useif(@mkdir($dir)===false){thrownew\RuntimeException('The directory '.$dir.' could not be created.');}
Loading history...
5690
// the polyfill maybe return false, so cast to string
The expression return self::str_split($str, $length, $clean_utf8) returns an array which contains values of type array|string[] which are incompatible with the documented value type string.
Loading history...
5854
}
5855
5856
/**
5857
* alias for "UTF8::str_starts_with()"
5858
*
5859
* @param string $haystack
5860
* @param string $needle
5861
*
5862
* @psalm-pure
5863
*
5864
* @return bool
5865
*
5866
* @see UTF8::str_starts_with()
5867
* @deprecated <p>please use "UTF8::str_starts_with()"</p>
5868
*/
5869
9
public static function str_begins(string $haystack, string $needle): bool
5870
{
5871
return self::str_starts_with($haystack, $needle);
5872
}
5873
5874
/**
5875
* Returns a camelCase version of the string. Trims surrounding spaces,
5876
* capitalizes letters following digits, spaces, dashes and underscores,
5877
* and removes spaces, dashes, as well as underscores.
The expression return self::substr_repl...)self::strlen($search)) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
8035
$subject,
8036
$replace,
8037
$pos,
8038
(int) self::strlen($search)
8039
);
8040
}
8041
8042
return $subject;
8043
}
8044
2
8045
/**
8046
2
* Replace the last "$search"-term with the "$replace"-term.
The expression return self::substr_repl...)self::strlen($search)) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
8069
$subject,
8070
$replace,
8071
$pos,
8072
(int) self::strlen($search)
8073
);
8074
}
8075
8076
return $subject;
8077
}
8078
8079
2
/**
8080
2
* Shuffles all the characters in the string.
8081
*
8082
* INFO: uses random algorithm which is weak for cryptography purposes
It seems like $array can also be of type null; however, parameter $array of arsort() does only seem to accept array, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
It seems like $array can also be of type null; however, parameter $array of asort() does only seem to accept array, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
8276
\asort(/** @scrutinizer ignore-type */ $array);
Loading history...
8277
}
8278
8279
return self::string($array);
8280
}
8281
8282
/**
8283
2
* Convert a string to an array of Unicode characters.
The expression return self::str_split_a...ry_to_use_mb_functions) returns the type array<mixed,string[]> which is incompatible with the documented return type string[].
throw new \InvalidArgumentException('The number of elements for each array isn\'t equal or the arrays are empty: (from: ' . \print_r($from, true) . ' | to: ' . \print_r($to, true) . ')');
It seems like $to can also be of type array<mixed,array> and array<mixed,string[]>; however, parameter $replace of str_replace() does only seem to accept string|string[], maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
The expression $length of type integer|null is loosely compared to false; this is ambiguous if the integer can be 0. You might want to explicitly use === null instead.
In PHP, under loose comparison (like ==, or !=, or switch conditions),
values of different types might be equal.
For integer values, zero is a special case, in particular the following
results might be unexpected:
0==false// true0==null// true123==false// false123==null// false// It is often better to use strict comparison0===false// false0===null// false
Loading history...
12082
return '';
12083
}
12084
12085
// impossible
12086
4
if ($offset && $offset > $str_length) {
12087
4
return '';
12088
4
}
12089
12090
$length = $length ?? (int) $str_length;
12091
12092
4
if (
12093
$encoding !== 'UTF-8'
12094
&&
12095
self::$SUPPORT['mbstring'] === false
12096
) {
12097
4
/**
12098
* @psalm-suppress ImpureFunctionCall - is is only a warning
It seems like $str can also be of type false; however, parameter $data of utf8_encode() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
$class_array was never initialized. Although not strictly required by PHP, it is generally a good practice to add $class_array = array(); before regardless.