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;
 | ||
| }
 |