Php 使用substr()时出错

Php 使用substr()时出错,php,Php,我在使用substr时出错: 警告:substr预期参数3很长 我是php新手,无法找到问题所在。我将感谢任何帮助 代码如下: function prepare_string($passed_string,$length) { $matches = array("`","!","@","®","©","~","#","$","%","^","&","*","-","=","+","|","\\","[","{","]","}","(",")",";",":","\

我在使用substr时出错:

警告:substr预期参数3很长

我是php新手,无法找到问题所在。我将感谢任何帮助

代码如下:

function prepare_string($passed_string,$length)
    {
        $matches = array("`","!","@","®","©","~","#","$","%","^","&","*","-","=","+","|","\\","[","{","]","}","(",")",";",":","\"","'",",","<",">",".","?","/","\'","\\","'","’");
        $passed_string =substr($passed_string,0,$length);
        for($i=0;$i<count($matches);$i++)
        {
            $passed_string = str_replace($matches[$i],"_",$passed_string);
        }
        $passed_string = str_replace(" ","_",$passed_string);
        return $passed_string;
    }
var_转储$length并查看其中的内容

删除foreach循环,而只放这一行$passed\u string=str\u replace$matches,\uu,$passed\u string

添加$matches数组,然后您可以去掉这一行$passed\u string=str\u replace,\uu,$passed\u string

听起来substr由于某种原因没有收到格式正确的值。。。一个选项是在函数中添加一行,将$length转换为整数。例如:

function prepare_string($passed_string,$length)
    {
        // Add this line
        $length = (int) $length;
        $matches = array("`","!","@","®","©","~","#","$","%","^","&","*","-","=","+","|","\\","[","{","]","}","(",")",";",":","\"","'",",","<",">",".","?","/","\'","\\","'","’");
        $passed_string =substr($passed_string,0,$length);
        for($i=0;$i<count($matches);$i++)
        {
            $passed_string = str_replace($matches[$i],"_",$passed_string);
        }
        $passed_string = str_replace(" ","_",$passed_string);
        return $passed_string;
    }

什么定义了$length?var_dump$length将告诉您要填充到substr中的内容$length值可能不是正确的值。仅供参考:str_replace也需要一个数组,因此您可以丢弃for循环。$length需要是一个整数值0或更大。正如其他人所建议的,转储$length并查看它是否定义为set,以及它具有什么类型的值。