我的代码有问题吗?我问,因为我无法在浏览器中显示图像。我试图将base64图像解码为png,但我还是无法显示图像。我的网址格式如下: 数据:图像/ JPEG; BASE64,iVBORw0kGgoAAAANSUhgAAAeAA ...
我的PHP代码
//Connect to database
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("studioassessor_01") or die (mysql_error());
$sql = "SELECT * FROM frame";
$result = mysql_query($sql);
if($result == FALSE){
die(mysql_error());
}
while($row = mysql_fetch_array($result)){
header("Content-type: image/png");
echo '<img src="data:image/png;base64,' . base64_decode($row['url']) . '" />';
}
在我测试了很多轮之后,我发现在ajax脚本中我的请求头部分有问题。请求标头已将我的基本64字符串值更改为另一个值。
function saveIt(){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert("Save successfully!");
}
}
var value1 = document.getElementById("url").value ;
var value2 = document.getElementById("time").value;
var value3 = document.getElementById("note").value;
xmlhttp.open("POST", "insertFrame.php", true);
xmlhttp.setRequestHeader("Content-type:image/png","application/x-www-form-urlencoded");
xmlhttp.send("url="+ value1 + "&time=" + value2 + "¬e=" + value3);
}
那么,我可以再次询问我应该为xmlhttp.setRequestHeaderPart做些什么吗?
答案 0 :(得分:1)
是的,您正在将base64数据解码为原始二进制文件,但告诉浏览器它仍然是base64。那不行。
echo '<img src="data:image/png;base64,' . $row['url'] . '" />';
应该是您所需要的一切。根本没有解码通话。请注意,您无法将原始二进制文件转储到数据uri中,即使您希望 - 它将随机(并且自然地)包含"
和其他html元字符,从而引入html注入问题。您必须htmlspecialchars()
二进制字符串,然后确定是否存在编码类型raw-binary-with-html-characters-escaped