. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Encodings; use function chr; use function intdiv; use function ord; use function str_split; /** * Convert between UTF-16BE and UTF-8. */ class UTF16BE extends AbstractUTF16Encoding { public const NAME = 'UTF-16BE'; public const BYTE_ORDER_MARK = "\xFE\xFF"; public const REPLACEMENT_CHARACTER = "\xFF\xFD"; /** * Convert two bytes to a code-point, taking care of byte-order. * * @param string $character * * @return int */ protected function characterToCodePoint(string $character): int { return 256 * ord($character[0]) + ord($character[1]); } /** * Convert a code-point to two bytes, taking care of byte-order. * * @param int $code_point * * @return string */ protected function codePointToCharacter(int $code_point): string { if ($code_point >= 0xD800 && $code_point <= 0xDFFF) { return self::REPLACEMENT_CHARACTER; } return chr(intdiv($code_point, 256)) . chr($code_point % 256); } }