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'])) {
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...
5609
}
5610
5611
/**
5612
* Replaces all occurrences of $search in $str by $replacement.
5613
*
5614
* @param string $str <p>The input string.</p>
5615
* @param array $search <p>The elements to search for.</p>
5616
* @param array|string $replacement <p>The string to replace with.</p>
5617
* @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...
5635
}
5636
5637
/**
5638
* 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...
5678
// 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...
5842
}
5843
5844
/**
5845
* alias for "UTF8::str_starts_with()"
5846
*
5847
* @param string $haystack
5848
* @param string $needle
5849
*
5850
* @psalm-pure
5851
*
5852
* @return bool
5853
*
5854
* @see UTF8::str_starts_with()
5855
* @deprecated <p>please use "UTF8::str_starts_with()"</p>
5856
*/
5857
1
public static function str_begins(string $haystack, string $needle): bool
5858
{
5859
1
return self::str_starts_with($haystack, $needle);
5860
}
5861
5862
/**
5863
* Returns a camelCase version of the string. Trims surrounding spaces,
5864
* capitalizes letters following digits, spaces, dashes and underscores,
5865
* 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...
7999
2
$subject,
8000
2
$replace,
8001
2
$pos,
8002
2
(int) self::strlen($search)
8003
);
8004
}
8005
8006
2
return $subject;
8007
}
8008
8009
/**
8010
* 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...
8033
2
$subject,
8034
2
$replace,
8035
2
$pos,
8036
2
(int) self::strlen($search)
8037
);
8038
}
8039
8040
2
return $subject;
8041
}
8042
8043
/**
8044
* Shuffles all the characters in the string.
8045
*
8046
* 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
8240
\asort(/** @scrutinizer ignore-type */ $array);
Loading history...
8241
}
8242
8243
2
return self::string($array);
8244
}
8245
8246
/**
8247
* 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...
11902
return '';
11903
}
11904
11905
// impossible
11906
4
if ($offset && $offset > $str_length) {
11907
return '';
11908
}
11909
11910
4
$length = $length ?? (int)$str_length;
11911
11912
if (
11913
4
$encoding !== 'UTF-8'
11914
&&
11915
4
self::$SUPPORT['mbstring'] === false
11916
) {
11917
/**
11918
* @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.