문자열 처리 메커니즘 수정
1. 16진수 문자가 포함된 문자열은 더 이상 숫자로 처리되지 않습니다.
16진수 문자가 포함된 문자열은 더 이상 숫자로 처리되지 않으며 다르게 처리되지 않습니다. 예를 들어, 다음 코드는:
var_dump("0x123" == "291"); // bool(false) (previously true) var_dump(is_numeric("0x123")); // bool(false) (previously true) var_dump("0xe" + "0x1"); // int(0) (previously 16) var_dump(substr("foo", "0x1")); // string(3) "foo" (previously "oo") // Notice: A non well formed numeric value encountered는 filter_var 함수를 사용하여 문자열에 16진수 문자가 포함되어 있는지 또는 정수
$str = "0xffff"; $int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); if (false === $int) { throw new Exception("Invalid integer!"); } var_dump($int); // int(65535)로 변환될 수 있는지 여부를 확인할 수 있습니다.
2. 나중에 u{에 잘못된 문자가 포함되면 오류가 보고됩니다
큰따옴표 및 heredocs 유니코드 코드 포인트 이스케이프 구문이 문법에 추가되었습니다. "u{" 뒤에는 UTF-8 문자가 와야 합니다. UTF-8이 아닌 문자인 경우 오류가 보고됩니다.
$str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequence는 첫 번째 문자를 이스케이프 처리하여 이 오류를 피할 수 있습니다.
$str = "\u{xyz}"; // Works fine
"u" 뒤에 {가 없으면 효과가 없습니다.
$str = "\u202e"; // Works fine
PHP IntlChar()
PHP 7은 intl 확장을 통해 국제화(i18n)와 지역화(l10n)를 지원합니다. 이 확장은 ICU 라이브러리의 기본 래퍼일 뿐이며 ICU 라이브러리와 유사한 방법과 기능을 제공합니다.
PHP 7은 새로운 IntlChar 클래스를 통해 ICU의 유니코드 문자 기능을 노출합니다. 이 클래스 자체는 여러 문자 집합에서 유니코드 문자를 조작하기 위한 많은 정적 메서드를 정의합니다.
Example
<?php printf('%x', IntlChar::CODEPOINT_MAX); echo IntlChar::charName('@'); var_dump(IntlChar::ispunct('!')); ?>
위 프로그램 실행의 출력 결과는 다음과 같습니다.
10ffff COMMERCIAL AT bool(true)