847 lines
16 KiB
PHP
847 lines
16 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace Safe;
|
|||
|
|
|||
|
use Safe\Exceptions\StringsException;
|
|||
|
|
|||
|
/**
|
|||
|
* convert_uudecode decodes a uuencoded string.
|
|||
|
*
|
|||
|
* @param string $data The uuencoded data.
|
|||
|
* @return string Returns the decoded data as a string.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function convert_uudecode(string $data): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \convert_uudecode($data);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* convert_uuencode encodes a string using the uuencode
|
|||
|
* algorithm.
|
|||
|
*
|
|||
|
* Uuencode translates all strings (including binary data) into printable
|
|||
|
* characters, making them safe for network transmissions. Uuencoded data is
|
|||
|
* about 35% larger than the original.
|
|||
|
*
|
|||
|
* @param string $data The data to be encoded.
|
|||
|
* @return string Returns the uuencoded data.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function convert_uuencode(string $data): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \convert_uuencode($data);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Decodes a hexadecimally encoded binary string.
|
|||
|
*
|
|||
|
* @param string $data Hexadecimal representation of data.
|
|||
|
* @return string Returns the binary representation of the given data.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function hex2bin(string $data): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \hex2bin($data);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Calculates the MD5 hash of the file specified by the
|
|||
|
* filename parameter using the
|
|||
|
* RSA Data Security, Inc.
|
|||
|
* MD5 Message-Digest Algorithm, and returns that hash.
|
|||
|
* The hash is a 32-character hexadecimal number.
|
|||
|
*
|
|||
|
* @param string $filename The filename
|
|||
|
* @param bool $raw_output When TRUE, returns the digest in raw binary format with a length of
|
|||
|
* 16.
|
|||
|
* @return string Returns a string on success, FALSE otherwise.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function md5_file(string $filename, bool $raw_output = false): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \md5_file($filename, $raw_output);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Calculates the metaphone key of str.
|
|||
|
*
|
|||
|
* Similar to soundex metaphone creates the same key for
|
|||
|
* similar sounding words. It's more accurate than
|
|||
|
* soundex as it knows the basic rules of English
|
|||
|
* pronunciation. The metaphone generated keys are of variable length.
|
|||
|
*
|
|||
|
* Metaphone was developed by Lawrence Philips
|
|||
|
* <lphilips at verity dot com>. It is described in ["Practical
|
|||
|
* Algorithms for Programmers", Binstock & Rex, Addison Wesley,
|
|||
|
* 1995].
|
|||
|
*
|
|||
|
* @param string $str The input string.
|
|||
|
* @param int $phonemes This parameter restricts the returned metaphone key to
|
|||
|
* phonemes characters in length.
|
|||
|
* The default value of 0 means no restriction.
|
|||
|
* @return string Returns the metaphone key as a string.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function metaphone(string $str, int $phonemes = 0): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \metaphone($str, $phonemes);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
*
|
|||
|
*
|
|||
|
* @param string $filename The filename of the file to hash.
|
|||
|
* @param bool $raw_output When TRUE, returns the digest in raw binary format with a length of
|
|||
|
* 20.
|
|||
|
* @return string Returns a string on success, FALSE otherwise.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function sha1_file(string $filename, bool $raw_output = false): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \sha1_file($filename, $raw_output);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Calculates the soundex key of str.
|
|||
|
*
|
|||
|
* Soundex keys have the property that words pronounced similarly
|
|||
|
* produce the same soundex key, and can thus be used to simplify
|
|||
|
* searches in databases where you know the pronunciation but not
|
|||
|
* the spelling. This soundex function returns a string 4 characters
|
|||
|
* long, starting with a letter.
|
|||
|
*
|
|||
|
* This particular soundex function is one described by Donald Knuth
|
|||
|
* in "The Art Of Computer Programming, vol. 3: Sorting And
|
|||
|
* Searching", Addison-Wesley (1973), pp. 391-392.
|
|||
|
*
|
|||
|
* @param string $str The input string.
|
|||
|
* @return string Returns the soundex key as a string.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function soundex(string $str): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \soundex($str);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Returns a string produced according to the formatting string
|
|||
|
* format.
|
|||
|
*
|
|||
|
* @param string $format The format string is composed of zero or more directives:
|
|||
|
* ordinary characters (excluding %) that are
|
|||
|
* copied directly to the result and conversion
|
|||
|
* specifications, each of which results in fetching its
|
|||
|
* own parameter.
|
|||
|
*
|
|||
|
* A conversion specification follows this prototype:
|
|||
|
* %[argnum$][flags][width][.precision]specifier.
|
|||
|
*
|
|||
|
* An integer followed by a dollar sign $,
|
|||
|
* to specify which number argument to treat in the conversion.
|
|||
|
*
|
|||
|
*
|
|||
|
* Flags
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Flag
|
|||
|
* Description
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* -
|
|||
|
*
|
|||
|
* Left-justify within the given field width;
|
|||
|
* Right justification is the default
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* +
|
|||
|
*
|
|||
|
* Prefix positive numbers with a plus sign
|
|||
|
* +; Default only negative
|
|||
|
* are prefixed with a negative sign.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* (space)
|
|||
|
*
|
|||
|
* Pads the result with spaces.
|
|||
|
* This is the default.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* 0
|
|||
|
*
|
|||
|
* Only left-pads numbers with zeros.
|
|||
|
* With s specifiers this can
|
|||
|
* also right-pad with zeros.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* '(char)
|
|||
|
*
|
|||
|
* Pads the result with the character (char).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* An integer that says how many characters (minimum)
|
|||
|
* this conversion should result in.
|
|||
|
*
|
|||
|
* A period . followed by an integer
|
|||
|
* who's meaning depends on the specifier:
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* For e, E,
|
|||
|
* f and F
|
|||
|
* specifiers: this is the number of digits to be printed
|
|||
|
* after the decimal point (by default, this is 6).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* For g and G
|
|||
|
* specifiers: this is the maximum number of significant
|
|||
|
* digits to be printed.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* For s specifier: it acts as a cutoff point,
|
|||
|
* setting a maximum character limit to the string.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* If the period is specified without an explicit value for precision,
|
|||
|
* 0 is assumed.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Specifiers
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Specifier
|
|||
|
* Description
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* %
|
|||
|
*
|
|||
|
* A literal percent character. No argument is required.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* b
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a binary number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* c
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as the character with that ASCII.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* d
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a (signed) decimal number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* e
|
|||
|
*
|
|||
|
* The argument is treated as scientific notation (e.g. 1.2e+2).
|
|||
|
* The precision specifier stands for the number of digits after the
|
|||
|
* decimal point since PHP 5.2.1. In earlier versions, it was taken as
|
|||
|
* number of significant digits (one less).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* E
|
|||
|
*
|
|||
|
* Like the e specifier but uses
|
|||
|
* uppercase letter (e.g. 1.2E+2).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* f
|
|||
|
*
|
|||
|
* The argument is treated as a float and presented
|
|||
|
* as a floating-point number (locale aware).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* F
|
|||
|
*
|
|||
|
* The argument is treated as a float and presented
|
|||
|
* as a floating-point number (non-locale aware).
|
|||
|
* Available as of PHP 5.0.3.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* g
|
|||
|
*
|
|||
|
*
|
|||
|
* General format.
|
|||
|
*
|
|||
|
*
|
|||
|
* Let P equal the precision if nonzero, 6 if the precision is omitted,
|
|||
|
* or 1 if the precision is zero.
|
|||
|
* Then, if a conversion with style E would have an exponent of X:
|
|||
|
*
|
|||
|
*
|
|||
|
* If P > X ≥ −4, the conversion is with style f and precision P − (X + 1).
|
|||
|
* Otherwise, the conversion is with style e and precision P − 1.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* G
|
|||
|
*
|
|||
|
* Like the g specifier but uses
|
|||
|
* E and f.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* o
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as an octal number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* s
|
|||
|
*
|
|||
|
* The argument is treated and presented as a string.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* u
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as an unsigned decimal number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* x
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a hexadecimal number (with lowercase letters).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* X
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a hexadecimal number (with uppercase letters).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* General format.
|
|||
|
*
|
|||
|
* Let P equal the precision if nonzero, 6 if the precision is omitted,
|
|||
|
* or 1 if the precision is zero.
|
|||
|
* Then, if a conversion with style E would have an exponent of X:
|
|||
|
*
|
|||
|
* If P > X ≥ −4, the conversion is with style f and precision P − (X + 1).
|
|||
|
* Otherwise, the conversion is with style e and precision P − 1.
|
|||
|
*
|
|||
|
* The c type specifier ignores padding and width
|
|||
|
*
|
|||
|
* Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
|
|||
|
*
|
|||
|
* Variables will be co-erced to a suitable type for the specifier:
|
|||
|
*
|
|||
|
* Type Handling
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Type
|
|||
|
* Specifiers
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* string
|
|||
|
* s
|
|||
|
*
|
|||
|
*
|
|||
|
* integer
|
|||
|
*
|
|||
|
* d,
|
|||
|
* u,
|
|||
|
* c,
|
|||
|
* o,
|
|||
|
* x,
|
|||
|
* X,
|
|||
|
* b
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* double
|
|||
|
*
|
|||
|
* g,
|
|||
|
* G,
|
|||
|
* e,
|
|||
|
* E,
|
|||
|
* f,
|
|||
|
* F
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* @param mixed $params
|
|||
|
* @return string Returns a string produced according to the formatting string
|
|||
|
* format.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function sprintf(string $format, ...$params): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
if ($params !== []) {
|
|||
|
$result = \sprintf($format, ...$params);
|
|||
|
} else {
|
|||
|
$result = \sprintf($format);
|
|||
|
}
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Returns the portion of string specified by the
|
|||
|
* start and length parameters.
|
|||
|
*
|
|||
|
* @param string $string The input string.
|
|||
|
* @param int $start If start is non-negative, the returned string
|
|||
|
* will start at the start'th position in
|
|||
|
* string, counting from zero. For instance,
|
|||
|
* in the string 'abcdef', the character at
|
|||
|
* position 0 is 'a', the
|
|||
|
* character at position 2 is
|
|||
|
* 'c', and so forth.
|
|||
|
*
|
|||
|
* If start is negative, the returned string
|
|||
|
* will start at the start'th character
|
|||
|
* from the end of string.
|
|||
|
*
|
|||
|
* If string is less than
|
|||
|
* start characters long, FALSE will be returned.
|
|||
|
*
|
|||
|
*
|
|||
|
* Using a negative start
|
|||
|
*
|
|||
|
*
|
|||
|
* ]]>
|
|||
|
*
|
|||
|
*
|
|||
|
* @param int $length If length is given and is positive, the string
|
|||
|
* returned will contain at most length characters
|
|||
|
* beginning from start (depending on the length of
|
|||
|
* string).
|
|||
|
*
|
|||
|
* If length is given and is negative, then that many
|
|||
|
* characters will be omitted from the end of string
|
|||
|
* (after the start position has been calculated when a
|
|||
|
* start is negative). If
|
|||
|
* start denotes the position of this truncation or
|
|||
|
* beyond, FALSE will be returned.
|
|||
|
*
|
|||
|
* If length is given and is 0,
|
|||
|
* FALSE or NULL, an empty string will be returned.
|
|||
|
*
|
|||
|
* If length is omitted, the substring starting from
|
|||
|
* start until the end of the string will be
|
|||
|
* returned.
|
|||
|
* @return string Returns the extracted part of string;, or
|
|||
|
* an empty string.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function substr(string $string, int $start, int $length = null): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
if ($length !== null) {
|
|||
|
$result = \substr($string, $start, $length);
|
|||
|
} else {
|
|||
|
$result = \substr($string, $start);
|
|||
|
}
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Operates as sprintf but accepts an array of
|
|||
|
* arguments, rather than a variable number of arguments.
|
|||
|
*
|
|||
|
* @param string $format The format string is composed of zero or more directives:
|
|||
|
* ordinary characters (excluding %) that are
|
|||
|
* copied directly to the result and conversion
|
|||
|
* specifications, each of which results in fetching its
|
|||
|
* own parameter.
|
|||
|
*
|
|||
|
* A conversion specification follows this prototype:
|
|||
|
* %[argnum$][flags][width][.precision]specifier.
|
|||
|
*
|
|||
|
* An integer followed by a dollar sign $,
|
|||
|
* to specify which number argument to treat in the conversion.
|
|||
|
*
|
|||
|
*
|
|||
|
* Flags
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Flag
|
|||
|
* Description
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* -
|
|||
|
*
|
|||
|
* Left-justify within the given field width;
|
|||
|
* Right justification is the default
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* +
|
|||
|
*
|
|||
|
* Prefix positive numbers with a plus sign
|
|||
|
* +; Default only negative
|
|||
|
* are prefixed with a negative sign.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* (space)
|
|||
|
*
|
|||
|
* Pads the result with spaces.
|
|||
|
* This is the default.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* 0
|
|||
|
*
|
|||
|
* Only left-pads numbers with zeros.
|
|||
|
* With s specifiers this can
|
|||
|
* also right-pad with zeros.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* '(char)
|
|||
|
*
|
|||
|
* Pads the result with the character (char).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* An integer that says how many characters (minimum)
|
|||
|
* this conversion should result in.
|
|||
|
*
|
|||
|
* A period . followed by an integer
|
|||
|
* who's meaning depends on the specifier:
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* For e, E,
|
|||
|
* f and F
|
|||
|
* specifiers: this is the number of digits to be printed
|
|||
|
* after the decimal point (by default, this is 6).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* For g and G
|
|||
|
* specifiers: this is the maximum number of significant
|
|||
|
* digits to be printed.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* For s specifier: it acts as a cutoff point,
|
|||
|
* setting a maximum character limit to the string.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* If the period is specified without an explicit value for precision,
|
|||
|
* 0 is assumed.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Specifiers
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Specifier
|
|||
|
* Description
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* %
|
|||
|
*
|
|||
|
* A literal percent character. No argument is required.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* b
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a binary number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* c
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as the character with that ASCII.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* d
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a (signed) decimal number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* e
|
|||
|
*
|
|||
|
* The argument is treated as scientific notation (e.g. 1.2e+2).
|
|||
|
* The precision specifier stands for the number of digits after the
|
|||
|
* decimal point since PHP 5.2.1. In earlier versions, it was taken as
|
|||
|
* number of significant digits (one less).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* E
|
|||
|
*
|
|||
|
* Like the e specifier but uses
|
|||
|
* uppercase letter (e.g. 1.2E+2).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* f
|
|||
|
*
|
|||
|
* The argument is treated as a float and presented
|
|||
|
* as a floating-point number (locale aware).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* F
|
|||
|
*
|
|||
|
* The argument is treated as a float and presented
|
|||
|
* as a floating-point number (non-locale aware).
|
|||
|
* Available as of PHP 5.0.3.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* g
|
|||
|
*
|
|||
|
*
|
|||
|
* General format.
|
|||
|
*
|
|||
|
*
|
|||
|
* Let P equal the precision if nonzero, 6 if the precision is omitted,
|
|||
|
* or 1 if the precision is zero.
|
|||
|
* Then, if a conversion with style E would have an exponent of X:
|
|||
|
*
|
|||
|
*
|
|||
|
* If P > X ≥ −4, the conversion is with style f and precision P − (X + 1).
|
|||
|
* Otherwise, the conversion is with style e and precision P − 1.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* G
|
|||
|
*
|
|||
|
* Like the g specifier but uses
|
|||
|
* E and f.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* o
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as an octal number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* s
|
|||
|
*
|
|||
|
* The argument is treated and presented as a string.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* u
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as an unsigned decimal number.
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* x
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a hexadecimal number (with lowercase letters).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* X
|
|||
|
*
|
|||
|
* The argument is treated as an integer and presented
|
|||
|
* as a hexadecimal number (with uppercase letters).
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* General format.
|
|||
|
*
|
|||
|
* Let P equal the precision if nonzero, 6 if the precision is omitted,
|
|||
|
* or 1 if the precision is zero.
|
|||
|
* Then, if a conversion with style E would have an exponent of X:
|
|||
|
*
|
|||
|
* If P > X ≥ −4, the conversion is with style f and precision P − (X + 1).
|
|||
|
* Otherwise, the conversion is with style e and precision P − 1.
|
|||
|
*
|
|||
|
* The c type specifier ignores padding and width
|
|||
|
*
|
|||
|
* Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
|
|||
|
*
|
|||
|
* Variables will be co-erced to a suitable type for the specifier:
|
|||
|
*
|
|||
|
* Type Handling
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* Type
|
|||
|
* Specifiers
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* string
|
|||
|
* s
|
|||
|
*
|
|||
|
*
|
|||
|
* integer
|
|||
|
*
|
|||
|
* d,
|
|||
|
* u,
|
|||
|
* c,
|
|||
|
* o,
|
|||
|
* x,
|
|||
|
* X,
|
|||
|
* b
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* double
|
|||
|
*
|
|||
|
* g,
|
|||
|
* G,
|
|||
|
* e,
|
|||
|
* E,
|
|||
|
* f,
|
|||
|
* F
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
*
|
|||
|
* @param array $args
|
|||
|
* @return string Return array values as a formatted string according to
|
|||
|
* format.
|
|||
|
* @throws StringsException
|
|||
|
*
|
|||
|
*/
|
|||
|
function vsprintf(string $format, array $args): string
|
|||
|
{
|
|||
|
error_clear_last();
|
|||
|
$result = \vsprintf($format, $args);
|
|||
|
if ($result === false) {
|
|||
|
throw StringsException::createFromPhpError();
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|