字符串处理机制修改

2015-11-12 14:37:34
开源春哥
19172
最后编辑:开源春哥 于 2015-11-12 20:09:14
分享链接
摘要:PHP7对字符串的调整。

一、含有十六进制字符的字符串不再视为数字

含有十六进制字符的字符串不再视为数字,也不再区别对待。比如下面的代码:

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函数来检查一个字符串是否包含十六进制字符或者是否可以转成一个整型
$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{后面如果包含非法字符会报错

双引号和heredocs语法里面增加了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

参考资料:

https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings

https://wiki.php.net/rfc/unicode_escape

评论列表
weilone 2016-08-03 17:01:27
标题一什么字体,看得我一愣。宇符串
1/1
发表评论
评论通过审核后显示。