PHP中substr()函数截取字符串首字符返回空字符串问题
问题描述
需要获取指定字符串的首字符,但代码执行后对应位置返回空结果,待处理的目标字符串如下:
080521234567890
使用的实现代码如下:
<?php if ($_GET['test1']) { echo "<table border =0>"; $parsing = "080521234567890"; echo "<tr>"; if ($p1 = substr($parsing,0,1)) { echo "<td><strong>Version Format n1</strong></td>"; echo "<td>: $p1</td"; } echo "</tr>"; echo "</table>"; } ?>
代码执行时,预期输出$p1值的位置显示为空。
问题原因
问题由两处错误共同导致:
- 条件判断逻辑错误:把赋值操作直接写在
if判断条件中,PHP会自动将赋值后的$p1值转换为布尔值做真假判定。目标字符串首字符为"0",而PHP规则中非空字符串"0"会被识别为假值,等价于布尔false,最终导致if条件不成立,包裹在if内部的输出代码块根本不会执行。你看到的空内容不是substr取值失败,而是对应的输出语句压根没有运行。 - HTML语法错误:输出单元格的代码
echo "<td>: $p1</td";存在笔误,闭合标签</td缺少末尾的>,会导致浏览器解析HTML时出现渲染异常,即使代码执行也可能出现内容不显示的问题。
修复方案
调整判断逻辑,不要直接用赋值结果作为if的判定条件,先完成取值操作,再通过严格比较判断函数是否执行成功(substr仅在执行出错时返回布尔值false,正常返回的字符串哪怕是"0"也属于有效结果),同时修正HTML标签笔误:
<?php if ($_GET['test1']) { echo "<table border='0'>"; $parsing = "080521234567890"; echo "<tr>"; // 先完成赋值 $p1 = substr($parsing, 0, 1); // 严格判断substr是否执行成功,避免"0"被误判为假 if ($p1 !== false) { echo "<td><strong>Version Format n1</strong></td>"; // 补全td闭合标签的>,规范变量写法 echo "<td>: {$p1}</td>"; } echo "</tr>"; echo "</table>"; } ?>
内容的提问来源于stack exchange,提问作者Noval Juniardi
相关产品推荐
相关产品推荐

