Php str_replace()工作不正常

Php str_replace()工作不正常,php,str-replace,Php,Str Replace,我已经有这个问题几个小时了,但我似乎不知道它可能是什么 我目前有一个管理面板脚本,允许管理员在主网站上发布博客,我有一行代码是利用str_replace foreach($_FILES["images"]["tmp_name"] AS $index => $tmpName) { //replace in body $Body = str_replace("[" . $index + 1 . "]", "<img src=\"/images/gallery/" .

我已经有这个问题几个小时了,但我似乎不知道它可能是什么

我目前有一个管理面板脚本,允许管理员在主网站上发布博客,我有一行代码是利用str_replace

foreach($_FILES["images"]["tmp_name"] AS $index => $tmpName)
{
     //replace in body
     $Body = str_replace("[" . $index + 1 . "]", "<img src=\"/images/gallery/" . $seoTitle . "/" . $_FILES["images"]["name"][$index] . "\" />", $Body);
目前,在写博客文章时,我允许上传图像,脚本处理每个图像时,它会用实际的img标记替换标记,例如[1][2],它的图像索引+1

我让脚本输出解析后的主体,它返回了一些东西

This is body content [<img src="/images/gallery/asdasdasdasd/windows.png">
正如您所看到的,由于一个奇怪的原因,图像在图像标记开始之前有一个开放的括号

由于某种原因,我没能找到解决办法。这曾经发生在其他人身上吗

谢谢, 雅各布

正如Dave所评论的,问题可能在代码的另一部分中,整个POST过程如下所示:

if(isset($_POST["create"]))
{
    $Title = trim($_POST["title"]);
    $Body = trim($_POST["body"]);
    $seoTitle = seo($Title);
    if($Title == "" || $Body == "")
    {
        $Template->assign_var("error", "Dude, fill in all of the fields.");
    }
        else
    {
        if(!empty($_FILES["images"]))
        {
            $allowed_types = array("image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png");
            $allowed_ext = array("jpg", "jpeg", "gif", "png");
            $photos = array();

            if(!is_dir(ROOT_DIR . "../images/gallery/" . $seoTitle))
                mkdir(ROOT_DIR . "../images/gallery/" . $seoTitle);
            foreach($_FILES["images"]["tmp_name"] AS $index => $tmpName)
            {
                $filedata = explode(".", $_FILES["images"]["name"][$index]);
                $ext = end($filedata);
                if(in_array($ext, $allowed_ext) && in_array($_FILES["images"]["type"][$index], $allowed_types))
                {
                    move_uploaded_file($tmpName, ROOT_DIR . "../images/gallery/" . $seoTitle . "/" . $_FILES["images"]["name"][$index]);
                    //replace photo in body
                    $Body = str_replace("[" . $index + 1 . "]", "<img class=\"blog_photo\" src=\"/images/gallery/" . $seoTitle . "/" . $_FILES["images"]["name"][$index] . "\" />", $Body);
                    $photos[] = $_FILES["images"]["name"][$index];
                }
            }
            $Template->assign_var("error", $Body);
        }
    }
}

使用此选项查找问题所在并比较输出

print_r($_FILES["images"]["tmp_name"]);
echo "<br />";

foreach($_FILES["images"]["tmp_name"] AS $index => $tmpName)
{
     //replace in body
     $Body = str_replace("[" . $index + 1 . "]", "<img src=\"/images/gallery/" . $seoTitle . "/" . $_FILES["images"]["name"][$index] . "\" />", $Body);

    echo "[" . $index + 1 . "]" . "<br />";
    echo "<img src=\"/images/gallery/" . $seoTitle . "/" . $_FILES["images"]["name"][$index] . "\" />";
}

显然,这个问题确实很奇怪,因为在执行$index+1时没有使用括号

因此,将代码更改为以下内容:

$Body = str_replace("[" . ($index + 1) . "]", "<img class=\"blog_photo\" src=\"/images/gallery/" . $seoTitle . "/" . $_FILES["images"]["name"][$index] . "\" />", $Body);

确实会起作用。

$index+1这是为了什么?$Body看起来像什么?$index+1是因为返回的第一个图像的索引为0,尽管用户应该能够键入[1]以获得第一个图像$Body是键入的$_POST变量,如:这是Body内容[1]显然,错误与未在此处发布的代码有关。已添加了整个POST块。返回了以下内容:数组[0]=>C:\Windows\Temp\phpD7F1.tmp1]返回该变量很奇怪,因为当我更改echo[.$index+1]时;为了回显[.$index+1.];,返回了相同的内容。没有任何更改。