PHP7-Handbuch für neue Funktionen
/ 字符串處理機(jī)制修改
字符串處理機(jī)制修改
字符串處理機(jī)制修改
一、含有十六進(jìn)制字符的字符串不再視為數(shù)字
含有十六進(jìn)制字符的字符串不再視為數(shù)字,也不再區(qū)別對(duì)待。比如下面的代碼:
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函數(shù)來檢查一個(gè)字符串是否包含十六進(jìn)制字符或者是否可以轉(zhuǎn)成一個(gè)整型
$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)
二、\u{后面如果包含非法字符會(huì)報(bào)錯(cuò)
雙引號(hào)和heredocs語法里面增加了unicode 碼點(diǎn)轉(zhuǎn)義語法,“\u{”后面必須是utf-8字符。如果是非utf-8字符,會(huì)報(bào)錯(cuò):
$str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequence可以通過對(duì)第一個(gè)\進(jìn)行轉(zhuǎn)義來避免這種錯(cuò)誤。
$str = "\\u{xyz}"; // Works fine
“\u”后面如果沒有{,則沒有影響:
$str = "\u202e"; // Works fine
PHP IntlChar()
PHP 7 通過 intl 擴(kuò)展來支持國(guó)際化 (i18n) 和本地化 (l10n) 。此擴(kuò)展僅僅是對(duì) ICU 庫的基礎(chǔ)包裝,并提供了和 ICU 庫類似的方法和特性。
PHP 7 通過新的 IntlChar 類暴露出 ICU 中的 Unicode 字符特性。這個(gè)類自身定義了許多靜態(tài)方法用于操作多字符集的 unicode 字符。
實(shí)例
<?php printf('%x', IntlChar::CODEPOINT_MAX); echo IntlChar::charName('@'); var_dump(IntlChar::ispunct('!')); ?>
以上程序執(zhí)行輸出結(jié)果為:
10ffff COMMERCIAL AT bool(true)