Internationalization UConverter::transcode
(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)
UConverter::transcode — 문자열을 한 문자 인코딩에서 다른 문자 인코딩으로 변환
설명
public static UConverter::transcode( string $str, string $toEncoding, string $fromEncoding, ?array $options = null ): string|false
str
을 fromEncoding
에서 toEncoding
으로 변환합니다.
매개변수
str
- 변환할 문자열입니다.
toEncoding
- 원하는 결과 인코딩입니다.
fromEncoding
- str을 해석하는 데 사용되는 현재 인코딩입니다.
options
- 다음 키를 포함할 수 있는 선택적 배열:
-
'to_subst'
-toEncoding
으로 인코딩할 수 없는str
의 문자 대신 사용할 대체 문자입니다. 지정된 경우 대상 인코딩에서 단일 문자를 나타내야 합니다.
-
반환 값
변환된 문자열을 반환하거나 실패 시 false
를 반환합니다.
Examples
예제 #1 UTF-8에서 UTF-16으로 및 그 반대로 변환
<?php
$utf8_string = "\x5A\x6F\xC3\xAB"; // 'Zoë' in UTF-8
$utf16_string = UConverter::transcode($utf8_string, 'UTF-16BE', 'UTF-8');
echo bin2hex($utf16_string), "\n";
$new_utf8_string = UConverter::transcode($utf16_string, 'UTF-8', 'UTF-16BE');
echo bin2hex($new_utf8_string), "\n";
?>
위의 예는 다음을 출력합니다.
005a006f00eb 5a6fc3ab
예제 #2 입력에 잘못된 문자가 있습니다.
입력 문자열에 fromEncoding
으로 지정된 인코딩에서 유효하지 않은 바이트 시퀀스가 포함되어 있으면 toEncoding
으로 변환하기 전에 유니코드 코드 포인트 U+FFFD(대체 문자)로 대체됩니다.
<?php
$invalid_utf8_string = "\xC3"; // incomplete multi-byte UTF-8 sequence
$utf16_string = UConverter::transcode($invalid_utf8_string, 'UTF-16BE', 'UTF-8');
echo bin2hex($utf16_string), "\n";
?>
위의 예는 다음을 출력합니다.
fffd
예제 #3 인코딩할 수 없는 문자
입력 문자열에 toEncoding
으로 표현할 수 없는 문자가 포함되어 있으면 단일 문자로 대체됩니다. 사용할 기본 문자는 인코딩에 따라 다르며 'to_subst'
옵션을 사용하여 제어할 수 있습니다.
<?php
$utf8_string = "\xE2\x82\xAC"; // € (Euro Sign) does not exist in ISO 8859-1
// Default replacement in ISO 8859-1 is "\x1A" (Substitute)
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
// Specify a replacement of '?' ("\x3F") instead
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
// Since ISO 8859-1 cannot map U+FFFD, invalid input is also replaced by to_subst
$invalid_utf8_string = "\xC3"; // incomplete multi-byte UTF-8 sequence
$iso8859_1_string = UConverter::transcode(
$invalid_utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
?>
위의 예는 다음을 출력합니다.
1a 3f 3f
기타
- mb_convert_encoding() - 문자열을 한 문자 인코딩에서 다른 문자 인코딩으로 변환
- iconv() - 문자열을 한 문자 인코딩에서 다른 문자 인코딩으로 변환