The expression return self::str_split($str) returns an array which contains values of type string[] which are incompatible with the documented value type string.
Loading history...
495
}
496
497
/**
498
* This method will auto-detect your server environment for UTF-8 support.
499
*
500
* @return true|null
501
*
502
* @internal <p>You don't need to run it manually, it will be triggered if it's needed.</p>
503
*/
504
4
public static function checkForSupport()
505
{
506
4
if (!isset(self::$SUPPORT['already_checked_via_portable_utf8'])) {
The expression return mb_convert_encodi...TF-8', 'HTML-ENTITIES') could return the type array which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
1190
}
1191
1192
/**
1193
* Decodes a MIME header field
1194
*
1195
* @param string $str
1196
* @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
1197
*
1198
* @psalm-pure
1199
*
1200
* @return false|string
1201
* <p>A decoded MIME field on success,
1202
* or false if an error occurs during the decoding.</p>
1203
*/
1204
2
public static function decode_mimeheader($str, string $encoding = 'UTF-8')
1205
{
1206
2
if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
The expression return self::filter($a) also could return the type object|string which is incompatible with the documented return type array<string,mixed>|false|null.
Loading history...
2065
}
2066
2067
/**
2068
* "filter_var()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
It seems like $options can also be of type null; however, parameter $options of filter_var() does only seem to accept array|integer, 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 $definition can also be of type null; however, parameter $options of filter_var_array() does only seem to accept array|integer, 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 return self::filter($a) also could return the type object|string which is incompatible with the documented return type array<string,mixed>|false|null.
Loading history...
2218
}
2219
2220
/**
2221
* Checks whether finfo is available on the server.
2222
*
2223
* @psalm-pure
2224
*
2225
* @return bool
2226
* <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
2227
*
2228
* @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
2229
*/
2230
public static function finfo_loaded(): bool
2231
{
2232
return \class_exists('finfo');
2233
}
2234
2235
/**
2236
* Returns the first $n characters of the string.
2237
*
2238
* @param string $str <p>The input string.</p>
2239
* @param int $n <p>Number of characters to retrieve from the start.</p>
2240
* @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
This check compares calls to functions or methods with their respective definitions.
If the call has less arguments than are defined, it raises an issue.
If a function is defined several times with a different number of parameters, the
check may pick up the wrong definition and report false positives. One codebase
where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.
It seems like $test3 can also be of type array; however, parameter $str of voku\helper\UTF8::count_chars() 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
It seems like $test3 can also be of type array; however, parameter $str of voku\helper\UTF8::count_chars() 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
* @param string $str <p>The string to be normalized.</p>
4690
* @param bool $keep_non_breaking_space [optional] <p>Set to true, to keep non-breaking-spaces.</p>
4691
* @param bool $keep_bidi_unicode_controls [optional] <p>Set to true, to keep non-printable (for the web)
4692
* bidirectional text chars.</p>
4693
* @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>
4694
*
4695
* @psalm-pure
4696
*
4697
* @return string
4698
* <p>A string with normalized whitespace.</p>
4699
*/
4700
61
public static function normalize_whitespace(
4701
string $str,
4702
bool $keep_non_breaking_space = false,
4703
bool $keep_bidi_unicode_controls = false,
4704
bool $normalize_control_characters = false
4705
): string {
4706
61
return ASCII::normalize_whitespace(
4707
61
$str,
4708
$keep_non_breaking_space,
4709
$keep_bidi_unicode_controls,
4710
$normalize_control_characters
4711
);
4712
}
4713
4714
/**
4715
* Calculates Unicode code point of the given UTF-8 encoded character.
4716
*
4717
* INFO: opposite to UTF8::chr()
4718
*
4719
* EXAMPLE: <code>UTF8::ord('☃'); // 0x2603</code>
4720
*
4721
* @param string $chr <p>The character of which to calculate code point.<p/>
4722
* @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
4723
*
4724
* @psalm-pure
4725
*
4726
* @return int
4727
* <p>Unicode code point of the given character,<br>
4728
* 0 on invalid UTF-8 byte sequence</p>
4729
*/
4730
27
public static function ord($chr, string $encoding = 'UTF-8'): int
4731
{
4732
/**
4733
* @psalm-suppress ImpureStaticVariable
4734
*
4735
* @var array<string,int>
4736
*/
4737
27
static $CHAR_CACHE = [];
4738
4739
// init
4740
27
$chr = (string) $chr;
4741
4742
27
if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
The expression $code of type integer|null is loosely compared to true; 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
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...
5294
}
5295
5296
/**
5297
* Replaces all occurrences of $search in $str by $replacement.
5298
*
5299
* @param string $str <p>The input string.</p>
5300
* @param string[] $search <p>The elements to search for.</p>
5301
* @param string|string[] $replacement <p>The string to replace with.</p>
5302
* @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...
5320
}
5321
5322
/**
5323
* 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...
5364
// the polyfill maybe return false, so cast to string
It seems like $save can also be of type true; however, parameter $substitute_character of mb_substitute_character() does only seem to accept integer|null|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 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[].
The expression return mb_convert_encodi...TF-8', 'HTML-ENTITIES') could return the type array which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
9247
}
9248
9249
/**
9250
* Checks if string starts with "BOM" (Byte Order Mark Character) character.
* @param string|string[] $to [optional] <p>The string being translated to to.</p>
11195
*
11196
* @psalm-pure
11197
*
11198
* @return string
11199
* <p>This function returns a copy of str, translating all occurrences of each character in "from"
11200
* to the corresponding character in "to".</p>
11201
*/
11202
2
public static function strtr(string $str, $from, $to = ''): string
11203
{
11204
2
if ($str === '') {
11205
return '';
11206
}
11207
11208
2
if ($from === $to) {
11209
return $str;
11210
}
11211
11212
2
if ($to !== '') {
11213
2
if (!\is_array($from)) {
11214
2
$from = self::str_split($from);
11215
}
11216
11217
2
if (!\is_array($to)) {
11218
2
$to = self::str_split($to);
11219
}
11220
11221
2
$count_from = \count($from);
11222
2
$count_to = \count($to);
11223
11224
2
if ($count_from !== $count_to) {
11225
2
if ($count_from > $count_to) {
11226
2
$from = \array_slice($from, 0, $count_to);
11227
2
} elseif ($count_from < $count_to) {
11228
2
$to = \array_slice($to, 0, $count_from);
11229
}
11230
}
11231
11232
2
$from = \array_combine($from, $to);
11233
2
if ($from === false) {
11234
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) . ')');
Are you sure print_r($from, true) of type string|true can be used in concatenation?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
11234
throw new \InvalidArgumentException('The number of elements for each array isn\'t equal or the arrays are empty: (from: ' . /** @scrutinizer ignore-type */ \print_r($from, true) . ' | to: ' . \print_r($to, true) . ')');
Are you sure print_r($to, true) of type string|true can be used in concatenation?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
11234
throw new \InvalidArgumentException('The number of elements for each array isn\'t equal or the arrays are empty: (from: ' . \print_r($from, true) . ' | to: ' . /** @scrutinizer ignore-type */ \print_r($to, true) . ')');
It seems like $to can also be of type 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...
11393
return '';
11394
}
11395
11396
// impossible
11397
4
if ($offset && $offset > $str_length) {
11398
return '';
11399
}
11400
11401
4
$length = $length ?? $str_length;
11402
11403
if (
11404
4
$encoding !== 'UTF-8'
11405
&&
11406
4
self::$SUPPORT['mbstring'] === false
11407
) {
11408
/**
11409
* @psalm-suppress ImpureFunctionCall - is is only a warning
It seems like $str can also be of type false; however, parameter $string 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.