rowbot / punycode
A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA).
Installs: 181 209
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: >=7.1
Requires (Dev)
- ext-mbstring: *
- phpstan/phpstan: ^1.2
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0
- squizlabs/php_codesniffer: ^3.5.1
README
An implementation of RFC 3492 Punycode in PHP, based on the sample implementation in Appendix C.
This is NOT a substitue for idn_to_ascii
and idn_to_utf8
.
Requirements
- PHP 7.1+
Installation
composer require rowbot/punycode
API
Punycode::decode(string $input, int $outLength = null, array &$caseFlags = [])
The Punycode::decode()
method takes an ASCII encoded string and decodes it to a UTF-8 encoded
string. Optionally, the second parameter can be specified to place a limit on the size of the
returned string.
Parameters
$input
- An ASCII encoded punycode string to convert to a UTF-8 encoded string.$outLength
- A positive integer representing the maximum length, in code points, of the resulting output string. Defaults to 2,147,483,647.$caseFlags
- An array, which will have the case flag of each character inserted into it.
Throws
\Rowbot\Punycode\Exception\OutputSizeExceededException
- If the size of the output string exceeds the maximum size specified.\Rowbot\Punycode\Exception\OverflowException
- If integer overflow occurs.\Rowbot\Punycode\Exception\InvalidInputException
- If input contains non-ASCII bytes or mapping a code point to a digit fails.
use Rowbot\Punycode\Punycode; try { echo Punycode::decode('Hello-Another-Way--fc4qua05auwb3674vfr0b'); // Hello-Another-Way-それぞれの場所 } catch (\Rowbot\Punycode\Exception\PunycodeException $e) { echo 'An error occured!'; }
Punycode::encode(string $input, int $outLength = null, array $caseFlags = [])
The Punycode::encode()
method takes a UTF-8 encoded string and converts it into an ASCII encoded
punycode string. Optionally, the second parameter can be specified to place a limit on the size of
the returned string.
Parameters
$input
- A UTF-8 encoded string to convert to punycode.$outLength
- A positive integer representing the maximum length, in code points, of the resulting output string. Defaults to 2,147,483,647.$caseFlags
- An array of bools where true indicates that the character should be uppercase and false indicates that it should be lowercase. This only affects ASCII characters[a-zA-Z]
.
Throws
\Rowbot\Punycode\Exception\OutputSizeExceededException
- If the size of the output string exceeds the maximum size specified.\Rowbot\Punycode\Exception\OverflowException
- If integer overflow occurs.
use Rowbot\Punycode\Punycode; try { echo Punycode::encode('Hello-Another-Way-それぞれの場所'); // Hello-Another-Way--fc4qua05auwb3674vfr0b } catch (\Rowbot\Punycode\Exception\PunycodeException $e) { echo 'An error occured!'; }