Javascript 意外标记“;W";php sys_get_temp_dir()导致的JSON.parse(数据)
我试图使用HTMLJavascript 意外标记“;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()生成的“\”字符在
表单.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 );