PHP中chr("0x03")报“A non well formed numeric value encountered”的原因
问题原因解析
这个问题我之前排查过,核心原因是chr()函数的参数要求加上PHP 7.1之后更严格的类型转换规则导致的:
- 首先,
chr()函数的设计是接受一个整数类型的参数,用来返回对应的ASCII字符。你传入的"0x03"是一个字符串,本质是十六进制值的文本表示,并非整数。 - 在PHP 7.1及更高版本中,对字符串转整数的逻辑做了严格限制:如果字符串不是标准的十进制数字格式(比如包含
x这类非数字字符,或者带0x十六进制前缀),PHP不会再自动将其解析为对应进制的整数,而是尝试转换时判定为“格式不正确的数值”,从而抛出你看到的A non well formed numeric value encountered警告。 - 举个对比:旧版本PHP可能会把
"0x03"偷偷转成整数3,但7.1开始这种“容错”被移除了,因为"0x03"本身不是合法的十进制数字字符串,转换失败就触发了警告。
解决方法
如果你需要用十六进制值来调用chr(),有两种靠谱的方式:
- 直接使用十六进制整数字面量(不要加引号):
chr(0x03) - 先把字符串转换成整数,再传入:
chr(hexdec("0x03"))或者chr(intval("0x03", 16))
内容的提问来源于stack exchange,提问作者kolle1703
相关产品推荐
相关产品推荐

