文字列処理機構の変更
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{後で不正な文字が含まれている場合、エラーが報告されます
Unicode コード ポイント エスケープ構文が二重引用符とヒアドキュメント構文に追加されました。「\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 の Unicode 文字機能を公開します。このクラス自体は、複数の文字セットの Unicode 文字を操作するための多くの静的メソッドを定義します。例
<?php printf('%x', IntlChar::CODEPOINT_MAX); echo IntlChar::charName('@'); var_dump(IntlChar::ispunct('!')); ?>上記のプログラムの実行出力は次のとおりです:
10ffff COMMERCIAL AT bool(true)