am在显示以blob形式存储在我的数据库中的图像时遇到问题,因为图像不显示而是显示了疯狂的字符和符号,我试图更改php的标签,但无济于事。帮助,这是我的代码:请注意,我希望将所有类型的图像另存为blob(jpg,jpeg,gif,svg,png)-预先感谢
<?php
include 'include/connect.php';
$sql = "SELECT * FROM room_details ORDER BY id ASC LIMIT 2, 1;";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
?>
<div class="room-thumb"><?php echo '<img alt="room 3" class="img-responsive" src="data:image;base64,'.$row['image'].'">'; ?>
<div class="mask">
<div class="main">
<h5><?= $row['room_type']; ?></h5>
<div class="price"><?= $row['room_name']; ?><span>a night</span></div>
</div>
<a href="room-detail.html" class="btn btn-primary btn-block">Read More</a>
</div>
</div>
} ?>
答案 0 :(得分:1)
由于Blob网址是使用base64解码的,因此您需要先对其进行编码。您可以使用 JavaScript 或 PHP 来做到这一点。
使用JavaScript,您可以仅使用atob()函数对base64网址进行编码,如下所示:
<script>
var x = <?php echo $row['image'] ?>
document.getELementById("code").innerHTML = atob(x);
</script>
<div class="room-thumb"><?php echo '<img alt="room 3" class="img-responsive" src="data:image;base64,' ?><span id="code"></span><?php echo '">'; ?>
<!-- DIV CONTENT HERE -->
</div>
但是,正如在其他SO thread中所述,如果您使用PHP本身或其他JavaScript方法(在同一线程中提到)来检索和编码base64 url,则这是一种更好的方法,因为上述方法是不安全。
使用PHP,您可以先对base64网址进行编码,然后再将其输出到HTML中,如下所示:
<?php echo '<img alt="room 3" class="img-responsive" src="data:image;base64,' . base64_encode(.$row['image']).'">'; ?>
或者您可以创建一个新的php文件,对该文件中的PHP进行编码,然后将编码后的base64 url回显到您的HTML,如下所示:
<!-- PHP file -->
<?php
$id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0;
$image = base64_encode(getImageFromDatabase($id)); // your code to fetch the image
header('Content-Type: image/jpeg');
echo $image;
?>
<!-- HTML -->
<img src="image.php?id=<?php echo $image_id; ?>" />
请查看其他SO thread中可接受的答案,以更深入地解释上述两种PHP方法。