You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:27:34