Javascript 意外标记“;W";php sys_get_temp_dir()导致的JSON.parse(数据)

Javascript 意外标记“;W";php sys_get_temp_dir()导致的JSON.parse(数据),javascript,php,json,Javascript,Php,Json,我试图使用HTML表单.submit()检索文件位置,当我使用硬编码目录时,代码工作正常并返回我需要的信息,例如,“../../asdf/”,但当我使用PHP内置的sys_get_temp_DIR(),我得到错误“意外标记”W“第行”data=JSON.parse(data)”,我尝试过在get_temp_dir函数之后添加斜杠和不添加斜杠(该函数的已知错误),它们都会产生相同的结果。有什么建议吗 php: 正如Felix Kling指出的,sys_get_temp_dir()生成的“\”字符在

我试图使用HTML
表单.submit()
检索文件位置,当我使用硬编码目录时,代码工作正常并返回我需要的信息,例如,
“../../asdf/”
,但当我使用PHP内置的
sys_get_temp_DIR()
,我得到错误
“意外标记”W“
第行”
data=JSON.parse(data)”,我尝试过在get_temp_dir函数之后添加斜杠和不添加斜杠(该函数的已知错误),它们都会产生相同的结果。有什么建议吗

php:


正如Felix Kling指出的,sys_get_temp_dir()生成的“\”字符在json_encode函数中不会被替换,因此会导致json.parse()函数崩溃。下面是我用来解决这个问题的循环(还可以用不同的字符处理其他几个类似的问题)


\W
在JSON中不是有效的转义序列(请参阅,字符串)。您必须转义
\
,以便将其视为文字反斜杠。虽然我认为
json\u encode
会自动处理这个问题。我该如何解决这个问题?用文件名中的
\\
替换所有
\
?是的,它们是动态生成的,所以我不得不编写一个函数来完成!但它现在起作用了,谢谢!json_encode应该转义以下内容:
$foo=“a\b”;echo$foo,json_encode$foo将回显
a\b a\\b
<?php
$failed = false;
$images = array();
$uploadDir = sys_get_temp_dir() . '/';

if ($_SERVER['CONTENT_LENGTH'] < 8380000) 
{
    if (isset($_FILES['filesToUpload']) && $_FILES['filesToUpload']['error'] != 0) 
    {    

            foreach($_FILES['filesToUpload']['tmp_name'] as $key=>$value) 
            {
                    $file = $_FILES['filesToUpload']['name'][$key];
                    // allow only image upload
                    if(preg_match('#image#',$_FILES['filesToUpload']['type'][$key])) 
                    {
                        //$tempFile = tempnam( $uploadDir, $file );

                        if(!move_uploaded_file($value, $uploadDir.$file)) 
                        {
                            $failed = true;
                        } 
                        else 
                        {                    
                            $images[] = $uploadDir . $file;                    
                        }    
                    } 
                    else 
                    {
                        $images = array("error"=>"Sorry, only images are allowed to upload");
                    }
            }
    }
} 
else 
{
    $images = array("error"=>"Sorry, Upload size exceed allowed upload size of 8MB");
}
if($failed == true) 
{
    $images = array("error"=>"Server Error<br/>Reported to Admin");
}
?>


<html>
 <body>
  <script type="text/javascript">
  window.parent.Uploader.done('<?php echo json_encode($images); ?>');
  </script>
 </body>
</html>
var Uploader = (function () 
    {

        jQuery('#UploadFiles').on('change', function () 
        {
            jQuery('#UploadFiles').parent('form').submit();
        });

        var fnUpload = function () 
        {
            jQuery('#UploadFiles').trigger('click');
        }

        var fnDone = function (data) 
        {
            alert( data );
            var data = JSON.parse(data); //ERROR THROWN HERE.

            if (typeof (data['error']) != "undefined") 
            {
                jQuery('#UploadedImages').html(data['error']);
                jQuery('#UploadFiles').val("");
                return;
            }
            var pics = [];
            for ( var i = 0; i < data.length; i++ ) 
            {
                pics.push("<img class='hidden' src='" + data[i] + "'/>");
            }

            modifyPictures( data );
            jQuery('#UploadedImages').html(pics.join(""));
            jQuery('#UploadFiles').val("");
            $('#gallery').pikachoose();
        }

        return( 
        {
            upload: fnUpload,
            done: fnDone
        })

    }());
["C:\Windows\TEMP/pause.png","C:\Windows\TEMP/thumb-back.png"]
$images = escapeJsonString( $images );

function escapeJsonString( $value ) 
{
    # list from www.json.org: (\b backspace, \f formfeed)    
    $escapers =     array("\\",     "/",   "\"",  "\n",  "\r",  "\t", "\x08", "\x0c");
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t",  "\\f",  "\\b");
    $result = str_replace($escapers, $replacements, $value);
    return $result;
}

echo json_encode( $images );